当前位置: 首页 > news >正文

hdu4407 n(n=400000)个数,a[i]=i,m个询问及更改(m=1000),更改某个位置的数,询问区间与这个数互质数的和:容斥/离线...

注意到m的范围很小,允许m2,然后重要的起始条件a[i]=i,这样可以k=1的时候用容斥预处理算出答案,然后离线保存

在k=2的时候暴力m2更改答案

 1 #include<stdio.h>
 2 #include<math.h>
 3 #include<string.h>
 4 #include<algorithm>
 5 #define LL long long
 6 using namespace std;
 7 struct A{
 8   LL l,r,p,q,ans;
 9 }a[1005];
10 struct B{
11   LL l,p,q;
12 }b[1005];
13 LL ans,tmp,ql,qr,cnt=0,prime[400005],vis[400005],f[15],x[400005];
14 LL gcd(LL a1,LL a2)
15 {
16   if (a2==0) return a1;
17   return gcd(a2,a1%a2);
18 }
19 LL sum(LL b,LL l)
20 {
21   l=l/b*b;
22   return (b+l)*((l-b)/b+1)/2;
23 }
24 void dfs(LL now,LL flag,LL bei)
25 {
26   if (flag) ans+=sum(bei,qr)-sum(bei,ql-1);
27   else ans-=sum(bei,qr)-sum(bei,ql-1);
28   for (LL i=now+1;i<=tmp;i++)
29     dfs(i,1-flag,bei*f[i]);
30 }
31 LL cal(LL l,LL r,LL p)
32 {
33   LL sqr,i;
34   tmp=0; sqr=(LL)sqrt(1.0*p);
35   for (i=1;i<=cnt&&prime[i]<=sqr;i++)
36     if (p%prime[i]==0){
37       f[++tmp]=prime[i];
38       while (p%prime[i]==0) p/=prime[i];
39     }
40   if (p!=1) f[++tmp]=p;
41   ans=0; ql=l; qr=r;
42   for (i=1;i<=tmp;i++)
43     dfs(i,1,f[i]);
44   return (l+r)*(r-l+1)/2-ans;
45 }
46 int main()
47 {
48   LL i,j,T,n,m,c1,c2,k;
49   memset(vis,0,sizeof(vis));
50   for (i=2;i<=400000;i++)
51     if (vis[i]==0)
52     {
53       prime[++cnt]=i;
54       for (j=2;i*j<=400000;j++) vis[i*j]=1;
55     }
56   scanf("%I64d",&T); 
57   while (T--){
58     scanf("%I64d%I64d",&n,&m);
59     c1=c2=0;
60     for (i=1;i<=m;i++){
61       scanf("%I64d",&k);
62       if (k==1){
63         c1++;
64         scanf("%I64d%I64d%I64d",&a[c1].l,&a[c1].r,&a[c1].p);
65         a[c1].q=i; a[c1].ans=cal(a[c1].l,a[c1].r,a[c1].p);
66       }
67       else{
68         c2++;
69         scanf("%I64d%I64d",&b[c2].l,&b[c2].p);
70         b[c2].q=i;
71       }
72     }
73     for (i=1;i<=n;i++) x[i]=i;
74     for (i=1;i<=c2;i++){
75       for (j=1;j<=c1;j++)
76         if (b[i].q<a[j].q&&b[i].l>=a[j].l&&b[i].l<=a[j].r){
77           if (gcd(x[b[i].l],a[j].p)==1) a[j].ans-=x[b[i].l];
78           if (gcd(b[i].p,a[j].p)==1) a[j].ans+=b[i].p;
79         }
80       x[b[i].l]=b[i].p;
81     }
82     for (i=1;i<=c1;i++) printf("%I64d\n",a[i].ans);
83   }
84 }
View Code

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4407

转载于:https://www.cnblogs.com/xiao-xin/articles/4446092.html

相关文章:

  • 血的教训---工作中注意的事项(未完)
  • Changing Vendor on Purchase Order
  • printStream 和printWriter区别
  • java 程序执行原理
  • 【转】 java中HashMap详解
  • android eclipse写layout文件失效问题解决
  • js调用百度地图接口
  • 《C语言及程序设计》程序阅读——查找和排序
  • ODAC(V9.5.15) 学习笔记(一)总论
  • 暴力分析backbone.js(1)
  • HISTFILESIZE与HISTSIZE的区别
  • #pragma data_seg 共享数据区(转)
  • Spring Custom Bean with BeanPostProcessor
  • LAMP架构之分离式-php-fpm
  • JQuery为元素添加样式
  • CSS盒模型深入
  • Java多线程(4):使用线程池执行定时任务
  • js面向对象
  • js学习笔记
  • Vue.js 移动端适配之 vw 解决方案
  • 基于 Babel 的 npm 包最小化设置
  • 基于web的全景—— Pannellum小试
  • 前端面试题总结
  • 三栏布局总结
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 小程序 setData 学问多
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 一些关于Rust在2019年的思考
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (2)Java 简介
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (pojstep1.1.2)2654(直叙式模拟)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (论文阅读11/100)Fast R-CNN
  • (全注解开发)学习Spring-MVC的第三天
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .Net(C#)自定义WinForm控件之小结篇
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET程序员迈向卓越的必由之路
  • @Autowired自动装配
  • @Transaction注解失效的几种场景(附有示例代码)
  • [2016.7 day.5] T2
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...