思路:原来以为自己已经完全理解了线段树,现在发现其实还差一些火候,做题的时候太拘泥于格式,思路不是很能放开。
#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
*/

I - Tunnel Warfare的更多相关文章

  1. hdu1540 Tunnel Warfare

    Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  2. [POJ2892]Tunnel Warfare

    [POJ2892]Tunnel Warfare 试题描述 During the War of Resistance Against Japan, tunnel warfare was carried ...

  3. HDU 1540 Tunnel Warfare 平衡树 / 线段树:单点更新,区间合并

    Tunnel Warfare                                  Time Limit: 4000/2000 MS (Java/Others)    Memory Lim ...

  4. POJ 2892 Tunnel Warfare(线段树单点更新区间合并)

    Tunnel Warfare Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 7876   Accepted: 3259 D ...

  5. HDU 1540 Tunnel Warfare 线段树区间合并

    Tunnel Warfare 题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少 思路:一个节点的最大连续区间由(左儿子的最大的连续区间,右儿子的最大连续区 ...

  6. hdu 1540 Tunnel Warfare (区间线段树(模板))

    http://acm.hdu.edu.cn/showproblem.php?pid=1540 Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) ...

  7. poj 2892 Tunnel Warfare(线段树)

    Tunnel Warfare Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 7499   Accepted: 3096 D ...

  8. HDU-1540          Tunnel Warfare

    Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  9. hdu 1540 Tunnel Warfare(线段树区间统计)

    Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  10. HDU 1540 Tunnel Warfare(最长连续区间 基础)

    校赛,还有什么途径可以申请加入ACM校队?  Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/ ...

随机推荐

  1. bzoj4078

    二分+2-sat 枚举第一个权值,二分第二个权值,然后2-sat检查,当第一个权值已经不能形成二分图时,再往下没意义,因为没法分成两个点集.(双指针好像跑得慢) #include<bits/st ...

  2. 浅谈JavaScript中的cookie

    什么是cookie?简单来说,cookie就是网站服务器存放在我们计算机上的一小段(一般大小不超过4KB)用来识别和记录用户的个人信息的文本.HTTP协议是一种没有“状态”的传输协议,也就是说,服务器 ...

  3. go 函数高级运用

    一.函数作用域 说明 作用域的定义:已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围 在说函数作用域之前,先简单说一下局部变量和局变量 简单的说: 全局变量:在一个文件中,任何地方都 ...

  4. mac下配置nginx

    nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器,下面我们来了解下nginx的用法. 安装nginx 使用brew安装nginx brew install ...

  5. Eclipse之调试代码和返回

    编写代码时,经常会遇到各种莫名其妙的问题,为了检测程序是哪里出现问题,我们通过断点调试来判断哪一步出错 一.断点 在需要断点的地方,在左侧双击鼠标设置断点,可设置多个 去掉断点:在断点上双击一下,没有 ...

  6. Spring AOP之静态代理

    软件151 李飞瑶 一.SpringAOP: ⒈AOP:Aspect Oriented Programming 面向切面编程, 实现的是核心业务和非核心业务之间的的分离,让核心类只做核心业务,代理类只 ...

  7. Currying vs Partial Application

    柯里化相当于函数重构: 偏函数相当于函数适配. So, what is the difference between currying and partial application? As we s ...

  8. day007 列表类型、元祖类型、 字典类型、 集合类型的内置方法

    目录 列表数据类型的内置方法 作用 定义方式 优先掌握的方法 需要掌握的方法 元祖类型的内置方法 作用 定义方式 优先掌握的方法(参考列表方法) 字典类型的内置方法 作用 定义方式 优先掌握的方法 需 ...

  9. Super Poker II UVA - 12298 FFT_生成函数

    Code: #include<bits/stdc++.h> #define maxn 1000000 #define ll long long #define double long do ...

  10. BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理 状压DP + 二进制 + 骚操作

    #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #defin ...