题目链接:
http://poj.org/problem?id=2892
题意:
【题意】
有n个村庄进行m次操作,有三种操作
D x:表示摧毁一个村庄
Q x:表示查询一个村庄左右连续的存在的村庄个数,若该村庄不存在为0
R:表示修复上一个被摧毁的村庄
【输入】
第一行n,m
接下来m行每行表示一个命令
【输出】
对于每次查询输出答案
题解:
每次二分查找从x向左的第一个被摧毁的村庄位置,两边二分,需要用树状数组或线段树维护区间和来快速判断二分。
代码:
#include<iostream>
#include<algorithm>
#include<string.h>
#include<stack>
#include<stdio.h>
#define maxn (50005)
using namespace std;
int n,m,num[maxn];
stack<int>