codeforces #52 C Circular RMQ(线段树)
来源:互联网 发布:appserv linux 编辑:程序博客网 时间:2024/06/09 14:23
题目地址:http://codeforces.com/problemset/problem/52/C
线段树区间更新水题。
代码如下:
#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>using namespace std;const int INF=0x3f3f3f3f;#define lson l, mid, rt<<1#define rson mid+1, r, rt<<1|1int min1[1000000], lazy[1000000];void PushUp(int rt){ min1[rt]=min(min1[rt<<1],min1[rt<<1|1]);}void PushDown(int rt){ if(lazy[rt]) { min1[rt<<1|1]+=lazy[rt]; min1[rt<<1]+=lazy[rt]; lazy[rt<<1|1]+=lazy[rt]; lazy[rt<<1]+=lazy[rt]; lazy[rt]=0; }}void build(int l, int r, int rt){ if(l==r) { scanf("%d",&min1[rt]); return ; } int mid=l+r>>1; build(lson); build(rson); PushUp(rt);}void update(int ll, int rr, int x, int l, int r, int rt){ if(ll<=l&&rr>=r) { lazy[rt]+=x; min1[rt]+=x; return ; } PushDown(rt); int mid=l+r>>1; if(ll<=mid) update(ll,rr,x,lson); if(rr>mid) update(ll,rr,x,rson); PushUp(rt);}int query(int ll, int rr, int l, int r, int rt){ if(ll<=l&&rr>=r) { return min1[rt]; } PushDown(rt); int ans=INF, mid=l+r>>1; if(ll<=mid) ans=min(ans,query(ll,rr,lson)); if(rr>mid) ans=min(ans,query(ll,rr,rson)); return ans;}int main(){ int n, l, r, x, q, i; scanf("%d",&n); build(0,n-1,1); scanf("%d",&q); memset(lazy,0,sizeof(lazy)); while(q--) { scanf("%d%d",&l,&r); if(getchar()==' ') { scanf("%d",&x); if(l>r) { update(l,n-1,x,0,n-1,1); update(0,r,x,0,n-1,1); /*for(i=1;i<=7;i++) printf("%d ",min1[i]); printf("\n");*/ } else { update(l,r,x,0,n-1,1); /*for(i=1;i<=7;i++) printf("%d ",min1[i]); printf("\n");*/ } } else { if(l>r) { int ans=min(query(l,n-1,0,n-1,1),query(0,r,0,n-1,1)); printf("%d\n",ans); } else { int ans=query(l,r,0,n-1,1); printf("%d\n",ans); } } } return 0;}
0 0
- Codeforces 52C - Circular RMQ - 线段树
- 【CodeForces】52C Circular RMQ 线段树
- CodeForces 52C Circular RMQ (区间更新线段树)
- codeforces #52 C Circular RMQ(线段树)
- CodeForces 52C Circular RMQ (区间更新线段树)
- CodeForces 52C Circular RMQ(区间循环线段树,区间更新,区间求和)
- CodeForces 52C Circular RMQ (线段树的区间更新+lazy tag)
- codeforces 52C Circular RMQ(线段树区间更新)【模板】
- Codeforce 52C---Circular RMQ 线段树
- CF#52 C Circular RMQ (线段树区间更新)
- 线段树 C. Circular RMQ
- Codeforces 52C Circular RMQ 线段树+从字符串读数字 sscanf
- 线段树 Circular RMQ
- Codeforces Round #413 C. Fountains(RMQ线段树)
- Circular RMQ CodeForces
- CF 52C Circular RMQ(区间更新,区间询问)
- Circular RMQ
- CodeForces 272C-Dima and Staircase-线段树区间更新-RMQ
- 8.Struts2 域属性的添加和访问
- 你还合不合我玩耍了
- UVA11388-GCD LCM
- ubuntu12.10创建新用户后无法登陆图形界面
- cocos2dx 框架
- codeforces #52 C Circular RMQ(线段树)
- 9.Struts2 文件上传
- 10.Struts2 自定义拦截器
- LeetCode-Minimum Path Sum
- MFC对话框程序用户怎样可以自定义修改背景图片
- 11.Struts2 输入校验
- 12.Struts2 国际化
- 组合数学《原书第四版》第三章的读书笔记
- 一种动态方式调用dll中类