UESTC 839
来源:互联网 发布:场控软件 编辑:程序博客网 时间:2024/06/06 03:44
B - 东风不与周郎便
Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %lluAppoint description:
Description
“揽二乔于东南兮,乐朝夕之与共”
一首铜雀台赋,将愤怒与恐惧散播在了孙吴大军之中。
对抗曹军,万事俱备,只欠东风。
现在已经找到n个风眼,这些风眼的东风有强有弱,诸葛亮说他每次祈风都能够将一段风眼的东风增强,但需人去帮他布阵。同时他需要时刻掌控风眼的状况,以确定下一步的计划,所以还需要知道一段风眼的强度之和。
借东风,此乃逆天之术,施术者会折阳寿不说,布阵者更是会受十倍之伤。
“何人能当此任?”
“在下愿往,大都督。”
“你是?”
“在下一无名小卒,来自跳蚤街。”
Input
第一行两个整数n,m,表示有n个风眼,诸葛亮一共祈风或询问了m次。
第二行n个整数,第i个数a_i表示第i个风眼已有东风的强度。
接下来m行,每行开始先读入一个整数s_i,指明这是一次询问还是一次祈风。
s_i = 0,表明这是一次询问,然后读入两个整数l_i,r_i,表示询问[l_i,r_i]区间中风眼的东风强度之和。
s_i = 1,表明这是一次祈风,然后读入三个整数l_i,r_i, w_i,表示把[l_i,r_i]区间中每个风眼的东风强度提升w_i。
1 \leq n,m \leq 100000,0 \leq a_i \leq 10000,0 \leq w_i \leq 10000, 1 \leq l_i \leq r_i \leq n
Output
有多少询问就输出多少行,每行输出一个整数,作为对该询问的回答。
Sample Input
5 4
1 2 3 4 5
1 2 3 2
0 3 4
1 4 5 3
0 2 4
Sample Output
9
16
换种风格写了一个线段树入门题,区间更新,区间查询
#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define lson L,mid,(rt<<1)#define rson mid+1,R,(rt<<1|1)#define N 140005#define LL long long LL ans;struct point{LL lc,rc;LL add;LL sum;LL mid(){return (lc+rc)>>1;}}tree[N<<2];void pushup(LL rt){tree[rt].sum=tree[rt<<1].sum+tree[rt<<1|1].sum;}void pushdown(LL rt){if(tree[rt].add){LL num=tree[rt].rc-tree[rt].lc+1;tree[rt<<1].sum+=tree[rt].add*(num-(num>>1));tree[rt<<1|1].sum+=tree[rt].add*((num>>1));tree[rt<<1|1].add+=tree[rt].add;tree[rt<<1].add+=tree[rt].add;tree[rt].add=0;}}void build(LL L,LL R,LL rt){tree[rt].lc=L;tree[rt].rc=R;tree[rt].add=0;if(L==R){scanf("%lld",&tree[rt].sum);return ;}LL mid=tree[rt].mid();build(lson);build(rson);pushup(rt);}void query(LL L,LL R,LL rt){if(tree[rt].lc==L&&tree[rt].rc==R){ans+=tree[rt].sum;return ;}pushdown(rt);LL mid=tree[rt].mid();if(R<=mid)query(L,R,rt<<1);else if(L>mid)query(L,R,rt<<1|1);else{query(lson);query(rson);}}void update(LL L,LL R,LL rt,LL v){if(tree[rt].lc==L&&tree[rt].rc==R){tree[rt].add+=v;tree[rt].sum+=(tree[rt].rc-tree[rt].lc+1)*v;return ;}pushdown(rt);LL mid=tree[rt].mid();if(R<=mid)update(L,R,rt<<1,v);else if(L>mid)update(L,R,rt<<1|1,v);else{update(lson,v);update(rson,v);}pushup(rt);}int main(){#ifdef CDZSCfreopen("i.txt","r",stdin);#endifLL n,m,x,y,k;LL v;while(~scanf("%lld%lld",&n,&m)){build(1,n,1);while(m--){scanf("%lld",&k);if(k==0){ans=0;scanf("%lld%lld",&x,&y);query(x,y,1);printf("%lld\n",ans);}else{scanf("%lld%lld%lld",&x,&y,&v);update(x,y,1,v);}}}return 0;}
0 0
- UESTC 839
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- 【cocos2d-x 3D游戏开发】2: 2D基础回顾---理解CCMenu类的实现, 实现点击放大的菜单按钮
- iOS开发之静态库.a的制作教程
- Notpad++快捷键(常用更新)
- LeetCode 169:Majority Element
- js-----javascript的编写方式
- UESTC 839
- 七牛---使用七牛给网站加速详解
- 又一次转正------让改变发生
- OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象
- geeksforgeeks Count number of binary strings without consecutive 1’s
- Android Handler解析
- android中textview竖排显示,只能说功能实现了
- 爬爬爬之路:UI(十七) 数据持久化(SQLite3数据库实现)
- PDF文档压缩