hdu 4614 Vases and Flowers(线段树)
2013-10-14 19:08
274 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614
#include <iostream> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; #define maxn 50010 #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 int n; int sum [maxn<<2]; int val [maxn<<2]; bool col [maxn<<2]; void PushUp(int rt){ sum[rt] = sum[rt<<1] + sum[rt<<1|1]; } void build(int l,int r,int rt){ col[rt] = 0; val[rt] = 0; if(l == r){ sum[rt]=0; return ; } int m = (l+r)/2; build(lson); build(rson); PushUp(rt); } void Pushdown(int rt,int len){ if(col[rt]){ col[rt<<1] = col[rt<<1|1] = col[rt]; col[rt] = 0; sum[rt<<1] = val[rt]* (len-(len>>1)); sum[rt<<1|1]= val[rt]* (len>>1); val[rt<<1] = val[rt<<1|1] = val[rt]; } } int query(int L,int R,int l,int r,int rt){ if(L<=l && r<=R){ return sum[rt]; } Pushdown(rt,r-l+1); int m = (l+r)/2; int ret=0; if(L <= m) ret += query(L,R,lson); if(m < R) ret += query(L,R,rson); return ret; } void update(int L,int R,int c,int l,int r,int rt){ if(L <= l && r <= R){ col[rt] = 1; val[rt] = c; sum[rt] = c* (r - l + 1); return ; } Pushdown(rt , r - l + 1); int m = (l + r) /2; if(L <= m) update(L, R, c,lson); if(m < R) update(L, R, c,rson); PushUp(rt); } int search(int l,int r,int x){ int m, L, ans; L = l; while(l <= r){ m = (l + r)/2; int tmp = m - L + 1 -query( L, m, 1, n, 1); if(tmp >= x){ ans = m; r = m - 1; } else l = m + 1; } return ans; } int main() { int m; int ncase; scanf("%d",&ncase); while(ncase--){ scanf("%d %d",&n,&m); memset (val, 0 ,sizeof(val)); build ( 1, n, 1); int op, a, b; while( m -- ){ scanf("%d %d %d",&op,&a,&b); a ++; if(a < 1) a = 1; if(b > n) b = n; if(op==1){ int tmp_sum = query( a, n, 1, n, 1); int rest = n + 1 - a -tmp_sum; if(!rest){ printf("Can not put any one.\n"); } else{ int fir_pos,sec_pos; fir_pos = search (a , n, 1); if( rest > b) rest = b; sec_pos = search (a , n, rest); printf("%d %d\n",fir_pos-1,sec_pos-1); update(fir_pos,sec_pos,1,1,n,1); } } else{ b ++; int fir_sum = query ( a, b, 1, n, 1); update( a, b, 0, 1, n, 1); printf("%d\n",fir_sum ); } } printf("\n"); } return 0; }
相关文章推荐
- HDU-4614 Vases and Flowers 线段树区间更新
- HDU 4614 Vases and Flowers (线段树[区间赋值+区间求和] + 二分)
- hdu 4614 Vases and Flowers 线段树
- 【HDU-4614】Vases and Flowers(线段树双查询)
- hdu 4614 Vases and Flowers(线段树)
- hdu 4614 Vases and Flowers(线段树)
- Hdu 4614 Vases and Flowers【二分+线段树】
- hdu 4614 Vases and Flowers(线段树:成段更新)
- HDU 4614 Vases and Flowers(线段树区间更新+二分)
- hdu 4614 Vases and Flowers 线段树
- Vases and Flowers HDU - 4614(线段树区间更新)
- hdu-4614-Vases and Flowers-线段树
- hdu 4614 Vases and Flowers (二分 线段树)
- hdu-4614-Vases and Flowers(线段树,区间更新区间查询,lazy,二分)
- Vases and Flowers - HDU 4614 - 线段树
- hdu 4614 Vases and Flowers(线段树)
- HDU 4614 Vases and Flowers (线段树 + 二分)
- HDU-4614 Vases and Flowers(线段树+区间修改+二分)
- HDU 4614 Vases and Flowers [二分 + 线段树]
- HDU 4614 Vases and Flowers (2013多校第二场线段树)