HDU 1540 && POJ 2892 线段树 单点染色 区间查询

来源:互联网 发布:网络维护员 编辑:程序博客网 时间:2024/06/13 05:11

九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/12617953

题意:

n 个点 q个操作

Q u 问u所在的位置  连续1的个数 ( 初始化n个点都为1)

D u 把u点染成 0 色

R 把最后一次染的点染成1色

 

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define N 51000#define L(x) (x<<1)#define R(x) (x<<1|1)inline int Max(int a,int b){return a>b?a:b;}inline int Min(int a,int b){return a<b?a:b;}struct node{int l,r;int mid(){ return (l+r)>>1;}int len(){ return r-l+1;}int Llen, Rlen;//连续1的个数 1表示没破坏}tree[N*4];void updata_up(int id){tree[id].Llen = tree[L(id)].Llen ;tree[id].Rlen = tree[R(id)].Rlen ;if( tree[L(id)].Llen == tree[L(id)].len() )tree[id].Llen += tree[R(id)].Llen;if( tree[R(id)].Rlen == tree[R(id)].len() )tree[id].Rlen += tree[L(id)].Rlen;}void build(int l, int r, int id){tree[id].l = l, tree[id].r = r;if(l == r){tree[id].Llen = tree[id].Rlen = 1;return ;}int mid = tree[id].mid();build(l, mid, L(id));build(mid+1, r, R(id));updata_up(id);}void updata(int pos, int id, int oper){if(tree[id].l == tree[id].r){tree[id].Llen = tree[id].Rlen = oper;return ;}int mid = tree[id].mid();if(pos <= mid)updata(pos, L(id), oper);else  updata(pos, R(id), oper);updata_up(id);}int query(int pos, int id){if(tree[id].l == tree[id].r)return tree[id].Llen;if(pos<= tree[id].mid()){if(tree[L(id)].r - tree[L(id)].Rlen + 1 <= pos)return tree[L(id)].Rlen + tree[R(id)].Llen;else return query(pos, L(id));}else {if(tree[R(id)].Llen + tree[R(id)].l - 1 >=pos)return tree[L(id)].Rlen + tree[R(id)].Llen;return query(pos, R(id));}}int last[N],top;int main(){int n,q,u;while(~scanf("%d %d",&n,&q)){build(1,n,1);top = 1;while(q--){char c = getchar();while(c!='D' && c!='Q' && c!='R')c=getchar();if(c=='D'){scanf("%d",&u);updata(u, 1, 0);last[top++] = u;}else if(c == 'Q'){scanf("%d",&u);printf("%d\n", query(u, 1));}else if(top>1)updata(last[--top], 1, 1);}}return 0;}/*10 99Q 1Q 2D 2Q 1D 2D 2D 1Q 1Q 2Q 3RQ 1Q 2Q 3RQ 1Q 2Q 3RQ 1Q 2Q 3ANS:10101008108101010101010------------3 100D 3D 1D 2RQ 1Q 2Q 3RQ 1Q 2Q 3ans:010220*/ 


 

原创粉丝点击