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*/
- HDU 1540 && POJ 2892 线段树 单点染色 区间查询
- HDU 3911 线段树区间染色 区间查询
- HDU 3397 线段树区间染色 区间查询
- POJ 2777-Count Color(线段树-区间染色查询)
- HDU 1540——Tunnel Warfare(线段树,区间合并+单点更新+单点查询)
- hdu 1540 Tunnel Warfare 线段树 单点更新,查询区间长度,区间合并
- poj 2828(线段树:单点插入,区间查询)
- POJ 2155 Matrix 二维线段树 区间修改 单点查询
- POJ 3264 Balanced Lineup (线段树单点更新 区间查询)
- POJ 3928 线段树 单点更新+区间查询
- HDU 2795 线段树(单点更新 区间查询)
- HDU 4819:单点更新,区间查询的二维线段树
- hdu 4046 Panda (线段树 单点更新 区间查询)
- hdu 1754 线段树单点修改+区间查询
- hdu 4819 二维线段树,单点修改区间查询
- 线段树 单点更新查询 区间最大值 hdu 2795 Billboard
- HDU 3016 Man Down(线段树区间单点查询+DP)
- HDU 1754 (线段树+单点更新+区间查询)
- Android image selector
- Java自带的GUI性能监控工具Jconsole以及JisualVM简介
- 登录时保存用户信息 --- NSUserDefaults的简单使用
- Shiro权限框架
- MVC 多文件上传后台接收
- HDU 1540 && POJ 2892 线段树 单点染色 区间查询
- 蓝牙PSKEY的调整
- jna调用原生代码——传递参数
- Android实现推送方式解决方案
- Oracle高级复制的同步复制的配置步骤说明
- String类成员函数的实现
- Android MediaPlayer状态图明晰注释
- 日记
- Linux下7z的使用方法