hdu 1698 线段树 成段更新
2015-04-20 17:54
253 查看
题意:一段钩子,每个钩子的值为1,有若干更新,每次跟新某段的值,若干查询某段的和
基础题了
基础题了
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<map> using namespace std; #define MOD 1000000007 const int INF=0x3f3f3f3f; const double eps=1e-5; #define cl(a) memset(a,0,sizeof(a)) #define ts printf("*****\n"); #define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|1 #define root 1,n,1 #define mid ((l+r)>>1) const int MAXN=111111; int n,m,t,Min; int sum[MAXN<<2],col[MAXN<<2]; void pushup(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1]; } void pushdown(int rt,int m) { if(col[rt]!=0) { sum[rt<<1]=(m-(m>>1))*col[rt]; //位运算一定要带括号 sum[rt<<1|1]=(m>>1)*col[rt]; col[rt<<1]=col[rt<<1|1]=col[rt]; col[rt]=0; } } void build(int l,int r,int rt){ col[rt]=0; sum[rt]=1; if(l==r) return; build(lson); build(rson); pushup(rt); } void update(int L,int R,int val,int l,int r,int rt) { if(l>=L&&r<=R) { col[rt]=val; sum[rt]=(r-l+1)*val; return; } if(L>r||R<l) return ; pushdown(rt,r-l+1); update(L,R,val,lson); update(L,R,val,rson); pushup(rt); } int main() { int i,j,k; #ifndef ONLINE_JUDGE freopen("1.in","r",stdin); #endif int l,t,o,a,b,c,tt; scanf("%d",&tt); for(int cas=1;cas<=tt;cas++) { scanf("%d%d",&n,&m); build(root); while(m--) { int a,b,c; scanf("%d%d%d",&a,&b,&c); update(a,b,c,root); } printf("Case %d: The total value of the hook is %d.\n",cas,sum[1]); } }
相关文章推荐
- hdu 1698 Just a Hook[线段树,updata成段更新]
- HDU 1698-Just a Hook(线段树 成段更新)
- hdu 1698 线段树成段更新
- hdu 1698 Just a Hook (线段树---成段更新)
- hdu 1698 线段树-成段更新
- HDU 1698 Just a Hook(线段树成段更新)
- HDU 1698 Just a Hook 线段树成段更新
- hdu 1698 poj 3468 线段树 成段更新(lazy标记)
- hdu 1698 Just a Hook 线段树成段更新
- [ACM] hdu 1698 Just a Hook (线段树,成段更新,懒惰标记)
- hdu 1698 Just a Hook(线段树 成段更新+总区间求和)
- HDU 1698 线段树的成段更新,懒人思想
- HDU 1698 线段树成段更新 Just a Hook
- HDU-1698 Just a Hook 线段树成段更新
- [ACM] hdu 1698 Just a Hook (线段树,成段更新,懒惰标记)
- hdu 1698 Just a Hook(线段树,成段更新,懒惰标记)
- hdu 1698 线段树 成段更新 lazy
- hdu_1698线段树成段更新
- HDU 1698 线段树进阶,成段更新
- 线段树成段更新 hdu 1698 Just a Hook