线段树成段更新
来源:互联网 发布:邮箱搜索软件 编辑:程序博客网 时间:2024/06/03 02:27
hdu 1698
http://acm.hdu.edu.cn/showproblem.php?pid=1698
成段更新求和
#include <iostream>#include <cstring>#include <cstdio>using namespace std;#define MAX 100100#define mid (l+r)>>1#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int num[MAX<<2];int add[MAX<<2];int n,m;void pushup(int rt){num[rt]=num[rt<<1]+num[rt<<1|1];}void build(int l,int r,int rt){add[rt]=0;num[rt]=1;if(l==r){return;}int m=mid;build(lson);build(rson);pushup(rt);}void pushdown(int m,int rt){if(add[rt]){add[rt<<1]=add[rt<<1|1]=add[rt];num[rt<<1]=(m-(m>>1))*add[rt];num[rt<<1|1]=(m>>1)*add[rt];add[rt]=0;}}void Updata(int L,int R,int c,int l,int r,int rt){if(L<=l && R>=r){add[rt]=c;num[rt]=(r-l+1)*c;return;}int m=mid;pushdown(r-l+1,rt);if(L<=m) Updata(L,R,c,lson);if(R>m) Updata(L,R,c,rson);pushup(rt);}int main(){int t;int flag=0;scanf("%d",&t);while(t--){++flag;cin>>n>>m;build(1,n,1);for(int i=1; i<=m; i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);Updata(a,b,c,1,n,1);}printf("Case %d: The total value of the hook is %d.\n",flag,num[1]);}return 0;}
poj 3468
http://poj.org/problem?id=3468
成段更新,成段查询
#include <iostream>#include <cstdio>#include <cstring>#define MAX 100100using namespace std;#define mid (l+r)>>1#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1long long sum[MAX<<2],add[MAX<<2];int n,m;void pushup(int rt){sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void build(int l,int r,int rt){add[rt]=0;if(l==r){scanf("%lld",&sum[rt]);return;}int m=mid;build(lson);build(rson);pushup(rt);}void pushdown(int m,int rt){if(add[rt]){add[rt<<1]+=add[rt];add[rt<<1|1]+=add[rt];sum[rt<<1]+=(m-(m>>1))*add[rt];sum[rt<<1|1]+=(m>>1)*add[rt];add[rt]=0;}}void updata(int L,int R,int p,int l,int r,int rt){if(L<=l && R>=r){add[rt]+=(long long)p;sum[rt]+=(r-l+1)*(long long)p;return;}pushdown(r-l+1,rt);int m=mid;if(L<=m) updata(L,R,p,lson);if(R>m) updata(L,R,p,rson);pushup(rt);}long long query(int L,int R,int l,int r,int rt){if(L<=l && R>=r){return sum[rt];}pushdown(r-l+1,rt);int m=mid;long long ret=0;if(L<=m) ret+=query(L,R,lson);if(R>m) ret+=query(L,R,rson);return ret;}int main(){while(scanf("%d%d",&n,&m)!=EOF){build(1,n,1);for(int i=1; i<=m; i++){char ch[2];int a,b,c;scanf("%s%d%d",ch,&a,&b);if(ch[0]=='Q') printf("%lld\n",query(a,b,1,n,1));else scanf("%d",&c),updata(a,b,c,1,n,1);}}return 0;}
- hdu4027 线段树成段更新
- poj3468 线段树成段更新
- 线段树成段更新-MB
- 线段树成段更新
- poj3468(线段树成段更新)
- poj1436(线段树成段更新)
- hdu1689(线段树成段更新)
- hdu_1698线段树成段更新
- poj_3468,线段树成段更新
- hdu1698 线段树成段更新
- 线段树成段更新
- 【POJ3468】【线段树成段更新】
- 【HDU1698】【线段树成段更新】
- hdu5023 线段树成段更新
- hdu1698 线段树成段更新
- POJ - 3468 线段树成段更新
- poj 3467(线段树成段更新)
- 线段树成段更新的模板
- 新建个博客
- ubuntu下解压缩包命令
- 虚函数、纯虚函数详解
- Stacks of Flapjacks 翻煎饼-UVA120 白书第五章
- 庞果网-数组排序
- 线段树成段更新
- hdu3197 Game
- 图解CSS的padding,margin,border属性(详细介绍及举例说明)
- 如何将WinDBG中命令的输出保存到文本文件中
- JavaSwing图形界面编程之布局管理器(二)
- middle BZOJ2653
- hdu_4763 Theme Section KMP
- jms topic与jms queue区别
- Android_learn