题目大意:给n个数,1-n。然后有m次操作,分别是求(x,y)中与p互质的和;将第x个数替换成c。

思路:一开始觉得区间操作往线段树上想,但是要存的东西太多,没有办法实现。

后面其实仔细一想跟前面几道题的解决方法差不多,之前求的是互质的个数,现在求的是互质数的和。这样的话其实可以用总数减去不是互质的数。**用等差数列求和来算就可以了。**然后最后再用一个map来存改变的数是否互质,再减去加上就好了。因为数据量不多。

有一个很重要的点是,巨坑,记得但凡数字大一点用longlong的时候都要乘上1ll。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
typedef long long ll;
const int maxn = 4e5+20;
int prime[maxn];int len = 0;
int gcd(int a, int b)
{return a%b==0? b:gcd(b,a%b);
}void getprime(int n)
{len = 0;for(int j = 2; j*j<=n; j++){if(n % j == 0)prime[len++] = j;while(n%j == 0) n/=j;}if(n>1)prime[len++] = n;
}
ll solve(int x)
{ll ans = 0;for(int i = 1; i<(1<<len); i++){ll temp= 1, cnt = 0;for(int j = 0; j<len; j++){if(i&(1<<j)){temp *= prime[j];cnt++;}}if(cnt %2 == 1){int n = x/temp;//cout<<n<<"?"<<endl;ans += 1ll*(1+n)*n*temp/2;}else{int n = x/temp;ans -= 1ll*(1+n)*n*temp/2;}//cout<<ans<<" !!"<<endl;}return ans;
}
int main()
{int n,m;int t;scanf("%d", &t);while(t--){map<int,int>mp;scanf("%d%d", &n, &m);mp.clear();while(m--){int op,x,y,c;scanf("%d", &op);if(op == 1){scanf("%d%d%d", &x, &y, &c);getprime(c);ll ans = 1ll *(y+x)*(y-x+1)/2;ans = ans - solve(y)+solve(x-1);for(auto iter = mp.begin(); iter!= mp.end(); iter++){ll tempx = (*iter).first, tempy = (*iter).second;if(tempx >=x && tempx<=y){if(gcd(tempx,c) == 1) ans -=tempx;if(gcd(tempy,c) == 1)ans +=tempy;}}printf("%lld\n", ans);}else{scanf("%d%d", &x, &c);mp[x] = c;}}}return 0;
}

HDU 4407 Sum(容斥+等差求和)相关推荐

  1. HDU 5514 Frogs 容斥

    http://acm.hdu.edu.cn/showproblem.php?pid=5514 没有想到怎么利用gcd的性质来改进指数级别的容斥,还是没有理解容斥的思想,只知道基础的. 已经知道结果就在 ...

  2. HDU 4407 sum 容斥原理

    算法: 利用数据1...N的性质,求与P的互质的个数,位运算,容斥定理.. #include<stdio.h> #include<stdlib.h> #include<s ...

  3. HDU 4407 Sum(容斥原理+状态压缩)

    题目链接 容斥原理不会,map不会,状态压缩不会.做毛线... 题目大意:给出1-n,n个数,有两个操作1是询问x-y区间上与p互质的数的和是多少,2是改变x位置上的数为c. 自己确实办不了,map这 ...

  4. hdu 4407 Sum

    http://acm.hdu.edu.cn/showproblem.php?pid=4407 题意:给定初始n个数1..n,两个操作,①1 x y p  询问第x个数到第y个数中与p互质的数的和; ② ...

  5. HDU 6143 Killer Names(排列+容斥,dp)

    Killer Names HDU 6143 (容斥+排列组合,dp+整数快速幂) 2017ACM暑期多校联合训练 - Team 8 1011 Killer Names 题目链接 Time Limit: ...

  6. 容斥 - HDU 4135 Co-prime

    Co-prime Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=4135 推荐: 容斥原理 Mean: 给你一个区间[l,r]和 ...

  7. Sum of the Line UPC5222 (容斥)

    莫过一日曝十日寒. 5222: Sum of the Line 时间限制: 1 Sec  内存限制: 128 MB 提交: 212  解决: 61 [提交] [状态] [讨论版] [命题人:admin ...

  8. hdu 6169 - 容斥

    题目链接:点击打开链接 题解思路:这题就是要求K要是质数,且要小于R,要么肯定是0.那么我们还的知道要是K是sqrt(n)以上的质数那么值肯定是它本身,那么我们只需要先把sqrt(10^11)内的质数 ...

  9. HDU 6052 To my boyfriend(容斥+单调栈)

    题意:对于一个n*m的方格,每个格子中都包含一种颜色,求出任意一个矩形包含不同颜色的期望. 思路: 啊啊啊啊啊,补了两天,总算A了这道题了,简直石乐志,前面的容斥还比较好写,后面的那个>13那个 ...

最新文章

  1. 【opencv】(6) 图像轮廓处理
  2. 乐鑫esp8266模块MicroPython开发板MQTT物联网人工智能最小系统
  3. JS callee 的例子
  4. Golang gorouting 并发控制 sync.WaitGroup 介绍与使用
  5. 用户参与度与活跃度的区别_用户参与度突然下降
  6. 蓝宝石显卡bios_狼神矿卡烤机89°C!强刷蓝宝石RX570超白金显卡BIOS降温75°教程...
  7. Verizon收购雅虎交易完成 硅谷第一美女梅耶尔辞职
  8. spring3.0学习之环境搭建
  9. window安全中心关闭防火墙后仍然会将xx文件删除的解决办法
  10. java word 在线编辑图片,_卓正软件 - PageOffice官方网站 - 在线编辑Word、Excel的Office文档控件...
  11. 大学计算机基础教程第10章数据通信技术基础
  12. 主题: 编译工具配置出现的问题总结
  13. 力扣 两数相加 C语言 题解
  14. zabbix5部署+Grafana大屏展示
  15. 艺赛旗(RPA)iS-RPA新手课堂 - 这个“鼠标”得会用
  16. matlab 函数 平移,MATLAB图线先下平移
  17. 城市轨道交通信号系统学习笔记(一)信号系统的特点
  18. 沃森变频器使用说明书_沃森(VicRuns)VD120A-GS系列变频器说明书用户手册.doc
  19. css中单位px、pt、em和rem的区别
  20. glibc全局构造与析构(解释了_do_global_ctors_aux)----写的相当不错!!!

热门文章

  1. 基于51单片机的半导体制冷小冰箱
  2. 同方威视智能安检为北京大兴国际机场安全护航
  3. stm32f4xx-GPIO
  4. JavaCV实现图片人脸检测
  5. 物联网平台正在涌向系统集成
  6. 解决:_pickle.UnpicklingError: A load persistent id instruction was encountered,
  7. PLC控制柜由哪些元件组成?
  8. UnicodeDecodeError:'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
  9. 猪猪猫.CN-HOME XP-SP2[精简安装版]
  10. vs2010c语言窗口程序,VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)...