codeforces 438D The Child and Sequence
2017-08-01 11:54
218 查看
题面:codeforces438D
正解:线段树。
这题好像是$picks$出的题,然后无限弱化才上的$cf$。。
区间取模,每个数取模以后至少$/2$,所以暴力搞即可。
证明:若$p<x/2$,那么$x \ mod \ p<x/2$;若$p>x/2$,那么$ x \ mod \ p=x-p<x/2$。
维护一个区间最大值,如果$<p$那么就直接退出,否则把这个区间递归做再取模。
正解:线段树。
这题好像是$picks$出的题,然后无限弱化才上的$cf$。。
区间取模,每个数取模以后至少$/2$,所以暴力搞即可。
证明:若$p<x/2$,那么$x \ mod \ p<x/2$;若$p>x/2$,那么$ x \ mod \ p=x-p<x/2$。
维护一个区间最大值,如果$<p$那么就直接退出,否则把这个区间递归做再取模。
//It is made by wfj_2048~ #include <algorithm> #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <vector> #include <cmath> #include <queue> #include <stack> #include <map> #include <set> #define N (200010) #define ls (x<<1) #define rs (x<<1|1) #define il inline #define RG register #define ll long long using namespace std; int mx[N<<2],a ,n,m; ll sum[N<<2]; il int gi(){ RG int x=0,q=1; RG char ch=getchar(); while ((ch<'0' || ch>'9') && ch!='-') ch=getchar(); if (ch=='-') q=-1,ch=getchar(); while (ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x; } il void pushup(RG int x){ sum[x]=sum[ls]+sum[rs],mx[x]=max(mx[ls],mx[rs]); return; } il void build(RG int x,RG int l,RG int r){ if (l==r){ sum[x]=mx[x]=a[l]; return; } RG int mid=(l+r)>>1; build(ls,l,mid),build(rs,mid+1,r),pushup(x); return; } il void update(RG int x,RG int l,RG int r,RG int p,RG int v){ if (l==r){ sum[x]=mx[x]=v; return; } RG int mid=(l+r)>>1; p<=mid?update(ls,l,mid,p,v):update(rs,mid+1,r,p,v); pushup(x); return; } il void updatemod(RG int x,RG int l,RG int r,RG int xl,RG int xr,RG int v){ if (l==r){ sum[x]%=v,mx[x]%=v; return; } if (mx[x]<v) return; RG int mid=(l+r)>>1; if (xr<=mid) updatemod(ls,l,mid,xl,xr,v); else if (xl>mid) updatemod(rs,mid+1,r,xl,xr,v); else updatemod(ls,l,mid,xl,mid,v),updatemod(rs,mid+1,r,mid+1,xr,v); pushup(x); return; } il ll query(RG int x,RG int l,RG int r,RG int xl,RG int xr){ if (xl<=l && r<=xr) return sum[x]; RG int mid=(l+r)>>1; if (xr<=mid) return query(ls,l,mid,xl,xr); else if (xl>mid) return query(rs,mid+1,r,xl,xr); else return query(ls,l,mid,xl,mid)+query(rs,mid+1,r,mid+1,xr); } int main(){ #ifndef ONLINE_JUDGE freopen("438D.in","r",stdin); freopen("438D.out","w",stdout); #endif n=gi(),m=gi(); for (RG int i=1;i<=n;++i) a[i]=gi(); build(1,1,n); for (RG int i=1,op,l,r,x,k;i<=m;++i){ op=gi(); if (op==1) l=gi(),r=gi(),printf("%I64d\n",query(1,1,n,l,r)); if (op==2) l=gi(),r=gi(),x=gi(),updatemod(1,1,n,l,r,x); if (op==3) k=gi(),x=gi(),update(1,1,n,k,x); } return 0; }
相关文章推荐
- CodeForces-567B Berland National Library
- codeforces-652【思维】
- Codeforces 617E: XOR and Favorite Number(莫队算法)
- codeforces 12b(string的操作)
- CodeForces 471C - MUH and House of Cards(推导)
- Codeforces 432D Prefixes and Suffixes(KMP+dp)
- Codeforces 590B Chip 'n Dale Rescue Rangers(二分)
- Codeforces 316D2
- CodeForces - 266B - B. Queue at the School
- Team_Codeforces_231A
- codeforces 148 D. Bag of mice 概率dp
- Codeforces 609C Load Balancing 【水题】
- 【CodeForces】[25A]IQ test
- 【Codeforces 631 C Report】+ 单调栈
- Codeforces-158B
- Codeforces 894.B Ralph And His Magic Field
- codeforces-#472B. Design Tutorial: Learn from Life(贪心)
- Codeforces Good Bye 2015 ABCDE
- CodeForces 447B DZY Loves Strings
- [边双连通分量 缩点 虚树 欧拉序列LCA] Codeforces 639F VK Cup 2016 - Round 1 F. Bear and Chemistry