题目链接

二分求上界和下界,树状数组。注意特殊情况。

 #include <cstring>
#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int p[];
int o[];
int stack[];
int n;
int lowbit(int t)
{
return t&(-t);
}
void insert(int t,int d)
{
while(t <= n)
{
p[t] += d;
t += lowbit(t);
}
}
int getsum(int t)
{
int sum = ;
while(t > )
{
sum += p[t];
t -= lowbit(t);
}
return sum;
}
int fr(int x)
{
int str,end,temp,mid;
str = ;
end = n;
while(str < end)
{
mid = (str+end+)/;
temp = getsum(mid);
if(temp > x)
end = mid-;
else
str = mid;
}
return end;
}
int fl(int x)
{
int str,end,temp,mid;
str = ;
end = n;
while(str < end)
{
mid = (str+end)/;
temp = getsum(mid);
if(temp < x)
str = mid+;
else
end = mid;
}
return str;
}
int main()
{
int i,m,top,num,t;
char ch[];
while(scanf("%d%d",&n,&m)!=EOF)
{
top = ;
for(i = ;i <= n;i ++)
{
p[i] = ;
o[i] = ;
}
for(i = ; i <= m; i ++)
{
scanf("%s",ch);
if(ch[] == 'R')
{
if(top != )
{
o[stack[top]] = ;
insert(stack[top--],-);
}
}
else if(ch[] == 'D')
{
scanf("%d",&num);
stack[++top] = num;
if(o[num] == )
{
o[num] = ;
insert(num,);
}
}
else if(ch[] == 'Q')
{
scanf("%d",&num);
if(o[num])
printf("0\n");
else
{
t = getsum(num);
if(t == )//注意一下
printf("%d\n",fr(t));
else
printf("%d\n",fr(t)-fl(t));
}
}
}
}
return ;
}

POJ 2892 Tunnel Warfare(树状数组+二分)的更多相关文章

  1. Tunnel Warfare(树状数组+二分)

    http://poj.org/problem?id=2892 题意:输入n,m.n代表数轴的长度,m代表操作数. D x: 摧毁点x Q x: 询问村庄x最左与最右没有被摧毁的点的距离 R  :恢复最 ...

  2. POJ 2182 Lost Cows (树状数组 && 二分查找)

    题意:给出数n, 代表有多少头牛, 这些牛的编号为1~n, 再给出含有n-1个数的序列, 每个序列的数 ai 代表前面还有多少头比 ai 编号要小的牛, 叫你根据上述信息还原出原始的牛的编号序列 分析 ...

  3. POJ 2828 Buy Tickets (线段树 or 树状数组+二分)

    题目链接:http://poj.org/problem?id=2828 题意就是给你n个人,然后每个人按顺序插队,问你最终的顺序是怎么样的. 反过来做就很容易了,从最后一个人开始推,最后一个人位置很容 ...

  4. POJ 2182 Lost Cows 【树状数组+二分】

    题目链接:http://poj.org/problem?id=2182 Lost Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  5. TZOJ 4602 高桥和低桥(二分或树状数组+二分)

    描述 有个脑筋急转弯是这样的:有距离很近的一高一低两座桥,两次洪水之后高桥被淹了两次,低桥却只被淹了一次,为什么?答案是:因为低桥太低了,第一次洪水退去之后水位依然在低桥之上,所以不算“淹了两次”.举 ...

  6. 树状数组+二分||线段树 HDOJ 5493 Queue

    题目传送门 题意:已知每个人的独一无二的身高以及排在他前面或者后面比他高的人数,问身高字典序最小的排法 分析:首先对身高从矮到高排序,那么可以知道每个人有多少人的身高比他高,那么取较小值(k[i], ...

  7. P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...

  8. The Stream of Corning 2( 权值线段树/(树状数组+二分) )

    题意: 有两种操作:1.在[l,r]上插入一条值为val的线段 2.问p位置上值第k小的线段的值(是否存在) 特别的,询问的时候l和p合起来是一个递增序列 1<=l,r<=1e9:1< ...

  9. 牛客多校第3场 J 思维+树状数组+二分

    牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...

随机推荐

  1. 2014·NOIP 新的历程,新的开始

    10.12 从9月1号开始奋战,到了今天终于重新把所有普及和提高的复赛题全部AC了.40多天AC130多道想想也是醉了,也许是机房一群大神给予我的压力吧. 想想暑假,整天玩游戏,与此同时,CZL.CY ...

  2. 深入了解类加载过程及Java程序执行顺序

    前言 在Java中,静态 Static关键字使用十分常见 本文全面 & 详细解析静态 Static关键字,希望你们会喜欢 目录 1. 定义 一种 表示静态属性的 关键字 / 修饰符 2. 作用 ...

  3. apache kafka系列之客户端开发-java

    1.依赖包 <dependency>            <groupId>org.apache.kafka</groupId>            <a ...

  4. spring工作机制及为什么要用?

    spring工作机制及为什么要用?1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作.2.DispatcherSer ...

  5. KVM 存储虚拟化

    KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的. Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型,后面会详细讨论.Volume 是 ...

  6. MATLAB(1)

    前言 之前经常用MATLAB,却不小心停留在了舒适区,连基本的调试方法都没有掌握.本文主要是对MATLAB程序调试中的一般方法进行总结,也是自己学习的记录.全文大致分为三个段落: 1)代码内调试: 2 ...

  7. UVa10214 Trees in a Wood.

    先算第一象限能看到的树,答案乘以4就是四个象限的数的总数,再加上坐标轴上四棵树,就是总共能看到的树. 树的总数为(2*a+1)*(2*b+1)-1  ←矩形面积除去原点位置 设一棵树的坐标是(x,y) ...

  8. laravel 查询构造器2

    //查询构造器 public function query() { //获取所有的数据 $student = DB::table('student')->get(); var_dump($stu ...

  9. 【WEB基础】HTML & CSS 基础入门(5)边框与背景

    前面(HTML图片) 漂亮的网页肯定少不了边框与背景的修饰,本篇笔记就是说明如何为网页上的元素设置边框或者背景(背景颜色和背景图片). 之前,先了解一下HTML中的图片元素,因为图片标签的使用非常简单 ...

  10. CODEVS_1033 蚯蚓的游戏问题 网络流 最小费用流 拆点

    原题链接:http://codevs.cn/problem/1033/ 题目描述 Description 在一块梯形田地上,一群蚯蚓在做收集食物游戏.蚯蚓们把梯形田地上的食物堆积整理如下: a(1,1 ...