hdu 4107 Gangster 线段树 成段更新
2012-01-12 11:26
405 查看
时间卡的比较紧,险过,成段更新,懒惰标记
发现define max(a,b)比写个函数来的快,不知为何
区间记录三个域
最大值、最小值、增加的值
如果最大值<P,加上2*c
如果最小值>=p,加上c;
注意每次别忘了把信息pushdown下来就好了
最后只需query()一次
View Code
发现define max(a,b)比写个函数来的快,不知为何
区间记录三个域
最大值、最小值、增加的值
如果最大值<P,加上2*c
如果最小值>=p,加上c;
注意每次别忘了把信息pushdown下来就好了
最后只需query()一次
View Code
#include<cstdio> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define max(a,b) (a>b?a:b) #define min(a,b) (a<b?a:b) const int maxn = 200010; int add[maxn<<2], MAX[maxn<<2],MIN[maxn<<2],P; void pushup(int rt){ MAX[rt]=max(MAX[rt<<1],MAX[rt<<1|1]); MIN[rt]=min(MIN[rt<<1],MIN[rt<<1|1]); } void pushdown(int rt){ if(add[rt]){ MAX[rt<<1]+=add[rt]; MAX[rt<<1|1]+=add[rt]; MIN[rt<<1]+=add[rt]; MIN[rt<<1|1]+=add[rt]; add[rt<<1]+=add[rt]; add[rt<<1|1]+=add[rt]; add[rt]=0; } } void build(int l,int r,int rt){ MAX[rt]=MIN[rt]=add[rt]=0; if(l==r) return ; int m=(l+r)>>1; build(lson); build(rson); } void update(int L,int R,int delta,int l,int r,int rt){ if(L<=l&&r<=R){ if(MAX[rt]<P){ add[rt]+=delta; MAX[rt]+=delta; MIN[rt]+=delta; return ; } if(MIN[rt]>=P){ add[rt]+=2*delta; MIN[rt]+=2*delta; MAX[rt]+=2*delta; return ; } } pushdown(rt); int m=(l+r)>>1; if(L<=m) update(L,R,delta,lson); if(R>m) update(L,R,delta,rson); pushup(rt); } void query(int l,int r,int rt){ if(l==r){ if(l!=1) printf(" "); printf("%d",add[rt]); return ; } pushdown(rt); int m=(l+r)>>1; query(lson); query(rson); } int main(){ int a,b,c,n,m; while(scanf("%d%d%d",&n,&m,&P)!=EOF){ build(1,n,1); while(m--) { scanf("%d%d%d",&a,&b,&c); update(a,b,c,1,n,1); } query(1,n,1); printf("\n"); } return 0; }
相关文章推荐
- hdu 4107 Gangster 线段树 成段更新 最后求每一位的值
- hdu 4107 Gangster(线段树,时间卡得很严)
- HDU 4107 Gangster(线段树 特殊懒惰标记)
- HDOJ 4107 Gangster 线段树 成段更新变化
- hdu 4107 Gangster(线段树)
- hdu 4107 线段树 成段更新
- hdu 4107 Gangster 线段树
- hdu 4107 Gangster(线段树,时间卡得很严)
- HDU 4107 Gangster (线段树)
- hdu_4107Gangster_线段树_区间修改
- HDU 3974 Assign the task(dfs时间戳+线段树成段更新)
- HDU-3225 Help with Intervals 线段树成段更新
- HDU 1698 Just a Hook(线段树成段更新)
- HDU4027——线段树成段更新——Can you answer these queries?
- HDU 4107 Gangster
- hdu 4107 Gangster (离线+打标记+树状数组)
- HDU - 1698 Just a Hook 线段树 成段更新
- 线段树 [成段更新] HDU 1698 Just a Hook
- HDU 1698 Just a Hook(线段树成段更新)
- HDU 1698 Just a Hook 线段树(成段更新)