HDU - 4407 Sum (容斥)
题意:初始序列[1..N](1<=N<=4e5),支持两种操作:1.求区间[x,y]内与p互素的数之和; 2。将x位置的数变为c。
分析:很容易把人骗到线段树的思维中,而实际上操作2单点的修改可以用map去记录,之后统计和的时候再去检查是否有给定区间内的数被修改。
区间[x,y]内与p互素的数之和,可以转化成求与p不互素的数之和。设p的质因子有[f1,f2...fk],则若干个质因子积的倍数一定不与p互素,用容斥求出在[x,y]区间内与p的质因子积的倍数。根据等差数列求和算出[x,y]区间的和,并检查区间内被修改的值,若原值与p互素,则要减去;若修改后的值与p互素,则要加上。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 4e5+;
typedef long long LL;
map<int,int> vz; LL gcd(LL a,LL b)
{
if(b==) return a;
return gcd(b,a%b);
} LL sum1(LL a1,LL an) //等差数列求和
{
LL n = an-a1+;
LL res = (a1 + an) * n / ;
return res;
} LL sum2(LL l,LL r,LL val) //等比数列求和
{
int n = ( r / val ) - ( ( l - ) / val ) ;
int a1 = ( l % val == )? l : ( val - l % val ) + l ;
int an = r - r % val ;
LL res = (LL)( a1 + an ) * (LL)n / ;
return res;
} LL cal(int l,int r,int p)
{
vector<int> fac;
int tmp = p;
for(int i=;i*i<=tmp;++i){
if(tmp%i==){
fac.push_back(i);
while(tmp%i==) tmp/=i;
}
}
if(tmp>) fac.push_back(tmp);
int cnt = fac.size();
int up = <<cnt;
LL res=;
for(int i=;i<up;++i){ //容斥统计与p不互素的数的和
int bits = ;
LL ji = ;
for(int j=;j<cnt;++j){
if(i&(<<j)){
bits++;
ji *= fac[j];
}
}
LL sum= sum2(l,r,ji);
if(bits &) res+=sum;
else res-=sum;
}
res = sum1(l,r)-res;
for(auto &v :vz){
if(v.first<l) continue;
if(v.first>r) break;
if(gcd(v.first,p)==) res-=v.first; //多加了要减去
if(gcd(v.second,p)==) res+=v.second; //修改后的结果与p互质,加上
}
return res;
} int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int T; scanf("%d",&T);
while(T--){
int N,M; scanf("%d%d",&N,&M);
vz.clear();
int op,x,y,p,c;
while(M--){
scanf("%d",&op);
if(op==){
scanf("%d%d%d",&x,&y,&p);
if(x>y) swap(x,y);
printf("%lld\n",cal(x,y,p));
}
else{
scanf("%d%d",&x,&c);
vz[x] =c; //记录修改
}
}
}
return ;
}
HDU - 4407 Sum (容斥)的更多相关文章
- hdu 4407 Sum 容斥+当前离线
乞讨X-Y之间p素数,,典型的纳入和排除问题,列的求和运算总和的数,注意,第一项是最后一个项目数. 如果不改变到第一记录的答案,脱机处理,能保存查询,候,遇到一个操作1,就遍历前面的操作.把改动加上去 ...
- hdu 5514 Frogs(容斥)
Frogs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- HDU 2588 思维 容斥
求满足$1<=X<=N ,(X,N)>=M$的个数,其中$N, M (2<=N<=1000000000, 1<=M<=N)$. 首先,假定$(x, n)=m$ ...
- HDU 5213 分块 容斥
给出n个数,给出m个询问,询问 区间[l,r] [u,v],在两个区间内分别取一个数,两个的和为k的对数数量. $k<=2*N$,$n <= 30000$ 发现可以容斥简化一个询问.一个询 ...
- HDU 5514 Frogs 容斥定理
Frogs Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5514 De ...
- HDU 1695 GCD 容斥
GCD 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1695 Description Given 5 integers: a, b, c, d, k ...
- hdu 1695 GCD 容斥+欧拉函数
题目链接 求 $ x\in[1, a] , y \in [1, b] $ 内 \(gcd(x, y) = k\)的(x, y)的对数. 问题等价于$ x\in[1, a/k] , y \in [1, ...
- HDU - 4135 Co-prime 容斥定理
题意:给定区间和n,求区间中与n互素的数的个数, . 思路:利用容斥定理求得先求得区间与n互素的数的个数,设表示区间中与n互素的数的个数, 那么区间中与n互素的数的个数等于.详细分析见求指定区间内与n ...
- HDU 4135 Co-prime (容斥+分解质因子)
<题目链接> 题目大意: 给定区间[A,B](1 <= A <= B <= 10 15)和N(1 <=N <= 10 9),求出该区间中与N互质的数的个数. ...
随机推荐
- C++ 类的多态一(virtual关键字--构造函数深刻理解)
//virtual关键字--构造函数深刻理解 #include<iostream> using namespace std; /* C语言编译器,c++编译器全部是静态链编,就是一段一段代 ...
- SQL Server Replace函数
REPLACE用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式. 语法REPLACE ( 'string_expression1' , 'string_expression2' ...
- vs的快捷键包含部分代码的自动生成
VS2010 快捷键 全屏:Shift+Alt+Enter注释选定内容:Ctrl+E+C/Crtr+E+U代码格式化:ctrl+E+F VS2008 使用小技巧——快捷键1. 怎样调整代码排版的格式? ...
- (转)java中Executor、ExecutorService、ThreadPoolExecutor介绍
转自: http://blog.csdn.net/linghu_java/article/details/17123057 ScheduledThreadPoolExecutor介绍: http:// ...
- library和libraryTarget使用场景组件开发
https://segmentfault.com/q/1010000004676608 https://github.com/zhengweikeng/blog/issues/10
- Eclipse设置护眼背景
Window-->Preferences-->General-->Editors-->Text Editors-->Background color 自定义颜色:色调:8 ...
- util.inherits
util.inherits util.inherits(constructor, superConstructor)是一个实现对象间原型继承 的函数. JavaScript 的面向对象特性是基于原型的 ...
- 1、Android自己的下拉刷新SwipeRefreshLayout
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/ ...
- 项目分析(GS,NET,NGP关系)
看了两天,这三者之间的关系好像是这样的,因为GS和net在同一台机器上,所以用共享内存通信,毕竟共享内存通信是最快的进程间通信的方式,而NGP是属于客户端的,Net是属于服务器的,他与Net进程是基于 ...
- [LintCode] 有效回文串
class Solution { public: /** * @param s A string * @return Whether the string is a valid palindrome ...