Tunnel Warfare(树状数组+二分)
http://poj.org/problem?id=2892
题意:输入n,m。n代表数轴的长度,m代表操作数。
D x: 摧毁点x
Q x: 询问村庄x最左与最右没有被摧毁的点的距离
R :恢复最后一个被摧毁的点
#include <stdio.h>
#include <string.h>
const int N=;
int c[N],keep[N],n;
bool vis[N]; int lowbit(int x)
{
return x&(-x);
}
int sum(int x)
{
int res = ;
while(x > )
{
res+=c[x];
x-=lowbit(x);
}
return res;
}
void add(int x,int d)
{
while(x <= n)
{
c[x]+=d;
x+=lowbit(x);
}
}
int binary_find(int key)
{
int l = ,r = n+,pos = n+;
while(l <= r)
{
int mid = (l+r)>>;
if (sum(mid) >= key)
{
r = mid-;
pos = mid;
}
else
l = mid+;
}
return pos;
}
int main()
{
char ch;
int m,x,t = ;
scanf("%d%d",&n,&m);
for (int i = ; i < m; i++)
{
getchar();
scanf("%c",&ch);
if (ch=='D')
{
scanf("%d",&x);
keep[++t] = ++x;
vis[x] = true;
add(x,);
}
else if (ch=='R')
{
x = keep[t--];
vis[x] = false;
add(x,-);
}
else
{
int pos1,pos2;
scanf("%d",&x);
x++;
if (vis[x])
printf("0\n");
else
{
x = sum(x);
pos1 = binary_find(x);
pos2 = binary_find(x+);
printf("%d\n",pos2-pos1-);
}
}
}
return ;
}
STL 做法
#include <stdio.h>
#include <set>
#include <stack>
using namespace std; int main()
{
char ch;
int n,m,x;
set<int>s;
stack<int>p;
scanf("%d%d",&n,&m);
s.insert();//增加最小边界,保证查找第一个位置时它的前一个位置存在
s.insert(n+);//增加最大边界,保证查找最后一个位置时它的后一位置存在
while(m--)
{
getchar();
scanf("%c",&ch);
if (ch=='D')
{
scanf("%d",&x);
s.insert(x);//s中储存被摧毁的点,且自动将键值从小到大排列
p.push(x);//用栈保存被摧毁的点,方便最后一个被摧毁的点的恢复
}
else if (ch=='R')
{
x = p.top();//取出最后一个被摧毁的点
p.pop();//从栈中删除该点
s.erase(x);//从s中删除该点
}
else
{
scanf("%d",&x);
int r = *(s.lower_bound(x));//r表示值>=x的第一个值,即x右边的被摧毁的点中最接近x的点
int l = *(--s.lower_bound(x));//l表示x左边的被摧毁的点中最接近x的点
if (r==x)//如果查询的点在s中被找到,说明该点已被摧毁
printf("0\n");
else
printf("%d\n",r-l-);//与x连续的没被摧毁的村庄个数
}
}
return ;
}
Tunnel Warfare(树状数组+二分)的更多相关文章
- POJ 2892 Tunnel Warfare(树状数组+二分)
题目链接 二分求上界和下界,树状数组.注意特殊情况. #include <cstring> #include <cstdio> #include <string> ...
- POJ 2828 Buy Tickets (线段树 or 树状数组+二分)
题目链接:http://poj.org/problem?id=2828 题意就是给你n个人,然后每个人按顺序插队,问你最终的顺序是怎么样的. 反过来做就很容易了,从最后一个人开始推,最后一个人位置很容 ...
- TZOJ 4602 高桥和低桥(二分或树状数组+二分)
描述 有个脑筋急转弯是这样的:有距离很近的一高一低两座桥,两次洪水之后高桥被淹了两次,低桥却只被淹了一次,为什么?答案是:因为低桥太低了,第一次洪水退去之后水位依然在低桥之上,所以不算“淹了两次”.举 ...
- POJ 2182 Lost Cows 【树状数组+二分】
题目链接:http://poj.org/problem?id=2182 Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- 树状数组+二分||线段树 HDOJ 5493 Queue
题目传送门 题意:已知每个人的独一无二的身高以及排在他前面或者后面比他高的人数,问身高字典序最小的排法 分析:首先对身高从矮到高排序,那么可以知道每个人有多少人的身高比他高,那么取较小值(k[i], ...
- P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]
题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...
- The Stream of Corning 2( 权值线段树/(树状数组+二分) )
题意: 有两种操作:1.在[l,r]上插入一条值为val的线段 2.问p位置上值第k小的线段的值(是否存在) 特别的,询问的时候l和p合起来是一个递增序列 1<=l,r<=1e9:1< ...
- 牛客多校第3场 J 思维+树状数组+二分
牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...
- POJ 2892 Tunnel Warfare || HDU 1540(树状数组+二分 || 线段树的单点更新+区间查询)
点我看题目 题意 :N个村子连成一条线,相邻的村子都有直接的地道进行相连,不相连的都由地道间接相连,三个命令,D x,表示x村庄被摧毁,R ,表示最后被摧毁的村庄已经重建了,Q x表示,与x直接或间 ...
随机推荐
- JavaScript day3(数据类型)
数据类型(data type) JavaScript提供七种不同的数据类型(data types),它们是string(字符串), symbol(符号), number(数字), undefined( ...
- Win32 线程同步
Win32 线程同步 ## Win32线程同步 ### 1. 原子锁 ### 2. 临界区 {全局变量} CRITICAL_SECTION CS = {0}; // 定义并初始化临界区结构体变量 {线 ...
- [LUOGU] 1108 低价购买
统计本质不同的\(LIS\)个数. 因为本题要求的是\(N^2\)级别的算法,就直接暴力统计\(LIS\)的个数了 然后统计方案数的话加入发现有之间有一个值,以它为结尾的\(LIS\)长度和当前的相等 ...
- Linux之iptables(四、网络防火墙及NAT)
网络防火墙 iptables/netfilter网络防火墙: (1) 充当网关 (2) 使用filter表的FORWARD链 注意的问题: (1) 请求-响应报文均会经由FORWARD链,要注意规则的 ...
- RHEL6 配置Yum库
在/mnt目录下创建子目录“/cdrom”(用于将iso文件挂载到此目录下) 镜像状态确定为“已连接”(“已连接”未勾选的情况下无法获得iso文件) 配置自动挂载文件 (系统开机时会主动读取“/etc ...
- JavaSE 学习笔记之StringBuilder(十六)
< java.lang >-- StringBuilder字符串缓冲区:★★★☆ JDK1.5出现StringBuiler:构造一个其中不带字符的字符串生成器,初始容量为 16 个字符.该 ...
- ansible plugins 列表
[action plugins] [cache plugins]jsonfilememcachedmemorymongodbpickleredisyaml [callback plugins]acti ...
- [HDU3038]How Many Answers Are Wrong(并查集)
传送门 和某题类似,只不过奇偶换成了和. ——代码 #include <cstdio> #include <iostream> #define N 1000001 int n, ...
- 络谷 P1363 幻想迷宫
P1363 幻想迷宫 题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊…… LHX:mo ...
- 使用JConsole观察分析Java程序的运行(转)
一.JConsole是什么 从Java 5开始 引入了JConsole.JConsole是一个内置Java性能分析器,可以从命令行或在GUI shell中运行.您可以轻松地使用JConsole(或者, ...