分块练习 A
来源:互联网 发布:js 打开新url 编辑:程序博客网 时间:2024/05/18 14:28
#include<bits/stdc++.h>using namespace std;#define maxn 50010char _c;bool flag;inline void read(int& x){flag = false;_c = getchar();x = 0;while(!isdigit(_c)){if(_c=='-')flag=true;_c=getchar();}while(isdigit(_c)){x = x*10+_c-'0';_c=getchar();}if(flag)x = -x;}typedef long long LL;inline void read(LL& x){flag = false;_c = getchar();x = 0;while(!isdigit(_c)){if(_c=='-')flag=true;_c=getchar();}while(isdigit(_c)){x = x*10+_c-'0';_c=getchar();}if(flag)x = -x;}int n;int belong[maxn],L[maxn],R[maxn],num,block;LL a[maxn],add[maxn];inline void build(){block = sqrt(n);num = n/block;if(n%block)num++;for(int i=1;i<=num;i++)L[i]=(i-1)*block+1,R[i]=i*block;R[num] = n;for(int i=1;i<=n;i++)belong[i] = (i-1)/block+1;}LL ask(int pos){return add[belong[pos]]+a[pos];}void update(int x,int y,int w){if(belong[x]==belong[y]){for(int i=x;i<=y;i++)a[i]+=w;return ;}for(int i=x;i<=R[belong[x]];i++)a[i]+=w;for(int i=belong[x]+1;i<belong[y];i++)add[i]+=w;for(int i=L[belong[y]];i<=y;i++)a[i]+=w;}int main(void){read(n);for(int i=1;i<=n;i++)read(a[i]);int op,a,b,c;build();for(int i=1;i<=n;i++){read(op),read(a),read(b),read(c);if(op)printf("%lld\n",ask(b));else update(a,b,c);}return 0;}
1 0
- 分块练习 A
- 分块练习
- 分块练习 B
- 分块练习 C
- 分块练习 D
- Scala练习-分块查找
- HDU1166敌兵布阵 分块解法,分块练习
- Codevs2038 线段树练习3(分块)
- Codevs 4927 线段树练习5(分块)
- 分块练习- BZOJ2002-Bounce 弹飞绵羊
- 机房练习赛nan(分块压缩)
- 分块。。
- 分块
- 分块
- 分块
- 分块
- 分块
- 分块
- 【Codeforces Round 375 (Div 2) F】【构造 贪心】st-Spanning Tree 树的特殊最小生成树使得S度不超SD,T度不超TD
- view的各种知识
- UVA 10375 Choose and divide (唯一分解定理)
- - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval
- Parentheses(弱校联盟十一专场)字典序
- 分块练习 A
- Swift 扩展(Extension)总结
- px 与 dp, sp换算公式?
- 2016-10-03
- 牛客网刷题之用两个栈实现队列
- JSON
- Linux数据类型总结
- vim中的常用命令
- HDU 5901 - Count Primes