HDU4407Sum ( 容斥原理)
題目連結:
http://acm.hdu.edu.cn/showproblem.php?pid=4407
題意:
一個長度為n的序列,開始的序列為1,2,3....n;
然後又兩種操作。
operation1: 詢問區間[a,b]中與p互質的數的和。
operation2:將序號為i的數修改為x;
如果沒有修改操作,那麼狠明顯就是一個容斥原理
計數的問題。
由於加上了修改,但是次數不多,因此我們可以將
修改後的點記錄下來,然後先容斥記下數,然後遍歷
記錄的陣列判斷修改後的數是否要加上,之前的數
是否要去掉。
程式碼如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
#include <vector>
using namespace std;
typedef long long LL;
map<int,int > mp;
map<int,int >::iterator it;
vector<int >vc;
void fen(int x){
vc.clear();
for(int i=2;i*i<=x;i++){
if(x%i==0){
vc.push_back(i);
while(x%i==0) x/=i;
}
}
if(x>1) vc.push_back(x);
}
LL solve(int x,int p){
LL ans =(LL)x*(x+1)/2;
fen(p);
//cout<<"vc.size() "<<vc.size()<<endl;
for(int i=1;i<(1<<vc.size());i++){
int cnt = 0;
LL tmp = 1;
for(int j=0;j<vc.size();j++){
if((1<<j)&i) tmp*=vc[j],cnt++;
}
LL k = x/tmp;
k = (k+1)*k/2*tmp;
if(cnt%2) ans -= k;
else ans += k;
}
return ans;
}
int gcd(int a,int b){
return b ? gcd(b,a%b) : a;
}
int main()
{
int t,n,m,ord,x,y,p;
scanf("%d",&t);
while(t--){
mp.clear();
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d",&ord);
if(ord==2){
scanf("%d%d",&x,&y);
mp[x]=y;
}
else{
scanf("%d%d%d",&x,&y,&p);
LL ans = solve(y,p)-solve(x-1,p);
//printf("ans= %d\n",ans);
for(it=mp.begin();it!=mp.end();it++){
if(it->first>=x&&it->first<=y){
if(gcd(it->first,p)==1) ans -= it->first;
if(gcd(it->second,p)==1) ans +=it->second;
}
}
printf("%I64d\n",ans);
}
}
}
return 0;
}
相關文章
- 容斥原理
- 【模板】容斥原理
- 容斥原理講解
- 遊戲裡面的容斥原理遊戲
- 容斥原理學習筆記筆記
- 容斥原理——數學知識
- #19. 計數(容斥原理)
- HDU 4059 The Boss on Mars ( 容斥原理)
- HDU4390Number Sequence(容斥原理)
- 容斥
- HDU 5468 Puzzled Elena(DFS序+容斥原理)
- HDU2841 Visible Trees (容斥原理)
- 反射容斥反射
- bzoj 2655: calc [容斥原理 伯努利數]
- bzoj 3812: 主旋律 [容斥原理 狀壓DP]
- HDU 1695-GCD(容斥原理+尤拉函式)GC函式
- Min-Max 容斥
- lg容斥與反演
- HDU 4135 Co-prime(容斥原理+分解質因數)
- cf449D. Jzzhu and Numbers(容斥原理 高維字首和)
- P1447 [NOI2010] 容斥原理
- HDU 4135——Co-prime(容斥原理&&二進位制列舉)
- 有標號DAG計數 [容斥原理 子集反演 組合數學 fft]FFT
- 容斥定理 AtCoder——FizzBuzz Sum Hard
- P4178 Tree——點分治 容斥
- bzoj1853: [Scoi2010]幸運數字(容斥原理)
- HDU 5072 Coprime (單色三角形問題+容斥原理)
- Min-Max 容斥學習筆記筆記
- 利用容斥原理求尤拉計劃565題的S(1E9,2017)
- bzoj1042: [HAOI2008]硬幣購物(Dp+容斥原理)
- [BZOJ4818][Sdoi2017][容斥原理][矩陣優化DP]序列計數矩陣優化
- ZOJ 3868 GCD Expectation (容斥+莫比烏斯反演)GC
- HDU 1695 GCD (容斥 + 莫比烏斯反演)GC
- POJ 3904 Sky Code (容斥+莫比烏斯反演)
- 2014ACM/ICPC亞洲區西安站 F題 color (組合數學,容斥原理)ACM
- CodeForces571A. Lengthening Sticks(組合數學-容斥)
- 「數學」助力每一個不知死活的容斥夢
- 機率期望進階 + Min-Max容斥 練習題