思路:原来以为自己已经完全理解了线段树,现在发现其实还差一些火候,做题的时候太拘泥于格式,思路不是很能放开。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 50010
using namespace std;
int n,m,top;
int stack[MAXN],vis[MAXN];
struct nond{
int l,r,len,ren,mid;
}tree[MAXN*];
void build(int now,int l,int r){
tree[now].l=l;tree[now].r=r;
tree[now].len=tree[now].r-tree[now].l+;
tree[now].ren=tree[now].mid=tree[now].len;
if(tree[now].l==tree[now].r) return ;
int mid=(tree[now].l+tree[now].r)/;
build(now*,l,mid);
build(now*+,mid+,r);
}
void change(int now,int x,int pos){
if(tree[now].l==tree[now].r){
tree[now].len=tree[now].ren=tree[now].mid=pos;
return ;
}
int mid=(tree[now].l+tree[now].r)/;
if(x<=mid) change(now*,x,pos);
else if(x>mid) change(now*+,x,pos);
tree[now].len=tree[now*].len;
tree[now].ren=tree[now*+].ren;
tree[now].mid=max(tree[now*].mid,tree[now*+].mid);
tree[now].mid=max(tree[now].mid,tree[now*].ren+tree[now*+].len);
if(tree[now*].len==tree[now*].r-tree[now*].l+)
tree[now].len=tree[now*].len+tree[now*+].len;
if(tree[now*+].ren==tree[now*+].r-tree[now*+].l+)
tree[now].ren=tree[now*+].ren+tree[now*].ren;
}
int query(int now,int k){
if(tree[now].l==tree[now].r||tree[now].mid==||tree[now].mid==tree[now].r-tree[now].l+)
return tree[now].mid;
int mid=(tree[now].l+tree[now].r)/;
if(k<=mid){
if(k>=tree[now*].r-tree[now*].ren+)
return query(now*,k)+query(now*+,mid+);
else return query(now*,k);
}
else{
if(k<=tree[now*+].l+tree[now*+].len-)
return query(now*+,k)+query(now*,mid);
else return query(now*+,k);
}
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
build(,,n);top=;
for(int i=;i<=m;i++){
char c;int x;
scanf("\n%c",&c);
if(c=='D'){
scanf("%d",&x);
stack[++top]=x;change(,x,);
}
else if(c=='Q'){
scanf("%d",&x);
printf("%d\n",query(,x));
}
else change(,stack[top--],);
}
}
}
/*
7 9
D 3
D 6
D 5
Q 4
Q 5
R
Q 4
R
Q 4
*/

最新文章

  1. Eclipse Java注释模板设置详解
  2. 图像旋转 OpenCV实现
  3. 2016国内最值得期待的响应式前端框架pintuer(拼图)--http://www.pintuer.com
  4. Spring事务传播简介
  5. POJ 3694 tarjan 桥+lca
  6. Python基础:函数式编程
  7. codevs 1060
  8. 使用Maven构建Web项目
  9. mysql 增加用户
  10. DFS与BFS
  11. (转载)MySQL 统计数据行数 Select Count
  12. 小白鼓捣GIT的心得
  13. b/s客户端和服务器的交互(转)
  14. 【2013Esri全球用户大会精彩看点】Jack为您全面解读“GIS-Transforming Our World”
  15. JQuery UI 封装了一些常用模板
  16. Objc将数据写入iOS真机的plist文件中
  17. Nginx 热部署最版本
  18. numpy中的方差、协方差、相关系数
  19. 使用Jupyter Notebook编写技术文档
  20. PAT 1007 素数对猜想

热门文章

  1. code+12月月赛 火锅盛宴
  2. 77.招聘信息管理 EXTJS 页面
  3. 浅谈自学Python之路(day2)
  4. TPshop规格组合错误
  5. MSSQL:删除系统作业计划
  6. [BZOJ1601] 灌水
  7. BZOJ 4514 费用流
  8. HTML &lt;!DOCTYPE&gt;标签 各版本对应的标签是否有无
  9. Elasticsearch之curl删除
  10. HBase编程 API入门系列之get(客户端而言)(2)