hdu 1698 Just a Hook 只是一个钩
2014-11-23 16:06
295 查看
这道题是一道线段树的成段更新的题目,刚开始做的时候没A过去,后来看别人的解题报告,代码如下。
#include<stdio.h> #include<string.h> #define maxn 100005 int a[maxn*4]; int s[maxn*4]; void push(int rt) { a[rt]=a[rt*2]+a[rt*2+1]; } void pdown(int rt, int x) { if(s[rt]!=-1) { s[rt*2]=s[rt*2+1] = s[rt]; a[rt*2]=(x-(x/2))*s[rt];///!!! a[rt*2+1]=(x/2)*s[rt];///!!! s[rt]=-1; } } void build(int l, int r, int rt) { s[rt]=-1, a[rt]=1; if(l == r) return; int mid=(l+r)/2; build(l, mid, rt*2); build(mid+1, r, rt*2+1); push(rt); } void update(int l, int r, int x, int L, int R, int rt) { if(l<=L&&r>=R) { s[rt]=x; a[rt]=x*(R-L+1);///!!! return; } pdown(rt, R-L+1);///!!! int mid =(L+R)/2; if(l <= mid) update(l, r, x, L, mid, rt<<1); if(r > mid) update(l, r, x, mid+1, R, rt<<1|1); push(rt); } int main() { int k=0; int n,t,q,x,y,w; while(~scanf("%d",&t)) { while(t--) { scanf("%d%d",&n,&q); build(1,n,1); while(q--) { scanf("%d%d%d",&x,&y,&w); update(x,y,w,1,n,1); } printf("Case %d: The total value of the hook is %d.\n", ++k, a[1]); } return 0; } }
相关文章推荐
- [hdu]1698 Just a Hook -- 线段树
- hdu 1698 Just a Hook
- HDU 1698 Just a Hook
- hdu 1698 Just a Hook
- HDU_1698 Just a Hook(线段树)
- HDU 1698 Just a Hook
- HDU 1698 Just a Hook [线段树-成段更新]
- HDU-1698 Just a Hook 线段树 Lazy思想
- HDU 1698 Just a Hook 线段树(成段更新)
- hdu 1698 Just a Hook(成段更新)
- hdu 1698 Just a Hook
- hdu 1698 Just a Hook
- hdu 1698 Just a Hook 线段树
- HDU 1698 JUST A HOOK(线段树)
- hdu 1698 Just a Hook
- hdu 1698 Just a Hook(线段树求总区间和)
- Hdu 1698 Just a Hook
- hdu 1698 just a hook
- hdu 1698 Just a Hook(成段更新)
- HDU 1698 Just a Hook (线段树 求和问题)