【XSY2111】Chef and Churus 分块 树状数组
来源:互联网 发布:睡别人女朋友 知乎 编辑:程序博客网 时间:2024/05/18 01:13
题目描述
有一个长度为
题解
分块。
设
修改时修改树状数组和每个区间的区间和。设当前
查询时完整的区间直接查询区间和,不完整的区间就暴力查询。
设块大小为
当
代码
#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<ctime>#include<utility>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<int,int> pii;ull c[100010];int a[100010];int n;void add(int x,ull v){ for(;x<=n;x+=x&-x) c[x]+=v;}ull sum(int x){ ull s=0; for(;x;x-=x&-x) s+=c[x]; return s;}int bl;ull s[1010];int d[1010][100010];int l[100010];int r[100010];int block[100010];int left[100010];int right[100010];int main(){ memset(c,0,sizeof c);// freopen("xsy2111.in","r",stdin);// freopen("xsy2111.out","w",stdout); int m; scanf("%d",&n); int i; for(i=1;i<=n;i++) { scanf("%d",&a[i]); add(i,a[i]); } bl=100; m=(n+bl-1)/bl; for(i=1;i<=n;i++) block[i]=(i+bl-1)/bl; for(i=1;i<=m;i++) { left[i]=(i-1)*bl+1; right[i]=min(i*bl,n); } for(i=1;i<=n;i++) { scanf("%d%d",&l[i],&r[i]); s[block[i]]+=sum(r[i])-sum(l[i]-1); d[block[i]][l[i]]++; if(r[i]<n) d[block[i]][r[i]+1]--; } int j; for(i=1;i<=m;i++) for(j=2;j<=n;j++) d[i][j]+=d[i][j-1]; int q; scanf("%d",&q); int op,x,y,k; for(i=1;i<=q;i++) { scanf("%d%d%d",&op,&x,&y); if(op==1) { int v=a[x]; for(j=1;j<=m;j++) s[j]+=ull(y-v)*d[j][x]; add(x,y-v); a[x]=y; } else { ull ans=0; for(j=block[x];j<=block[y];j++) if(left[j]>=x&&right[j]<=y) ans+=s[j]; else { int mi=max(left[j],x); int mx=min(right[j],y); for(k=mi;k<=mx;k++) ans+=sum(r[k])-sum(l[k]-1); } printf("%llu\n",ans); } } return 0;}
阅读全文
0 0
- 【XSY2111】Chef and Churus 分块 树状数组
- CodeChef "Chef and Churus" 分块+树状数组
- 【CodeChef】Chef and Churu 分块+树状数组
- 【codechef FNCS】【Chef and Churu】【分块】
- CodeChef:Chef and Problems(分块 & 二分)
- bzoj2141【分块+树状数组】
- HDU 5057 Argestes and Sequence (离线树状数组 || 分块)
- HDU5057-Argestes and Sequence(分块&&树状数组)
- CC NOV14 Chef and Churu 分块+BIT维护单点.
- 2141: 排队 分块+树状数组
- HDU 4638 分块Or树状数组
- BZOJ 2141 排队 分块+树状数组
- hdu 5193 分块 树状数组 逆序对
- Hdu1556 Color the ball [分块][树状数组]
- 莫队+分块+树状数组 【Ahoi2013】 作业 bzoj3236
- Codeforces 785E 分块+树状数组
- [BZOJ]2141: 排队 分块+树状数组
- BZOJ 2141 排队 [分块+树状数组]
- POJ 2586
- Python正则表达式指南
- windows版本打开git bash总是闪退的解决办法
- ngModel 双向绑定(初学者易错点)
- MFC 编译Debug正确, 但Release退出崩溃
- 【XSY2111】Chef and Churus 分块 树状数组
- 大数据学习——大数据薪资高到没对手,本文为您专供学习资料!
- 2017.9.18试题
- js 实现html 的table 的增删改存
- Java8 的日期排序
- C#_Excel操作方法汇总
- 16. 3Sum Closest(找出和最接近给定值的三个数)
- Linux下python安装pip
- CF--518A--Strange Addition