bzoj4631
4631: 踩气球
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 260 Solved: 133
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 1 1 1 1
5 5
2 2
1 3
5
4
2
5
2
3
Sample Output
1
1
2
3
【样例说明】
实际上每次操作的盒子是: 4 2 1 3 5
在第二次操作后,第二个熊孩子会高兴 (区间[2,2]中的气球已经全部被踩爆)。
在第四次操作后,第三个熊孩子会高兴(区间[1,3]中的气球已经全部被踩爆)。
在第五次操作后,第一个熊孩子会高兴(区间[5,5]中的气球已经全部被踩爆)。
HINT
Source
按r排序,每次询问二分查找r的位置,线段树上查找最大值就可以了(我仍然想不出来)
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
#define N 200010
struct query
{
int l,r;
}q[N];
int n,m,Q,cnt,ans,lastans;
int pre[N],nxt[N],a[N];
PII tree[N<<];
bool cp(query x,query y)
{
if(x.r!=y.r) return x.r<y.r;
return x.l>y.l;
}
void update(int l,int r,int x,int pos,int num)
{
if(l==r)
{
tree[x].first=num;
tree[x].second=l;
return;
}
int mid=(l+r)>>;
if(pos<=mid) update(l,mid,x<<,pos,num);
else update(mid+,r,x<<|,pos,num);
if(tree[x<<].first>tree[x<<|].first) tree[x]=tree[x<<];
else tree[x]=tree[x<<|];
}
PII query(int l,int r,int x,int a,int b)
{
if(l>b||r<a) return make_pair(,);
if(l>=a&&r<=b) return tree[x];
int mid=(l+r)>>;
PII t1=query(l,mid,x<<,a,b),t2=query(mid+,r,x<<|,a,b);
if(t1.first>t2.first) return t1; else return t2;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
{
scanf("%d",&a[i]);
pre[i]=i-; nxt[i]=i+;
}
for(int i=;i<=m;++i) scanf("%d%d",&q[i].l,&q[i].r);
sort(q+,q+m+,cp);
for(int i=;i<=m;++i) update(,m,,i,q[i].l);
scanf("%d",&Q);
while(Q--)
{
int x; scanf("%d",&x);
x=(x+lastans-)%n+;
a[x]--;
if(a[x])
{
printf("%d\n",ans);
continue;
}
int pos1=n,pos2=n,left=pre[x]+,right=nxt[x]-;
int l=,r=n+;
while(r-l>)
{
int mid=(l+r)>>;
if(q[mid].r>=left) r=pos1=mid; else l=mid;
}
l=; r=n+;
while(r-l>)
{
int mid=(l+r)>>;
if(q[mid].r<=right) l=pos2=mid; else r=mid;
}
/* if(q[pos1].r>right) pos1--;
if(q[pos2].r>right) pos2--;
if(pre[x]==0) pos1=1; */
// printf("x=%d\n",x);
// printf("left=%d right=%d\n",left,right);
// printf("pos1=%d pos2=%d\n",pos1,pos2);
while()
{
PII t=query(,m,,pos1,pos2);
// printf("query=%d\n",t.first);
if(t.first>=left&&t.first<=right&&t.first!=)
{
ans++;
update(,m,,t.second,);
} else break;
}
nxt[pre[x]]=nxt[x];
pre[nxt[x]]=pre[x];
lastans=ans;
printf("%d\n",ans);
}
return ;
}
bzoj4631的更多相关文章
- 【BZOJ4631】踩气球 链表+线段树+堆
[BZOJ4631]踩气球 Description 六一儿童节到了, SHUXK 被迫陪着M个熊孩子玩一个无聊的游戏:有N个盒子从左到右排成一排,第i个盒子里装着Ai个气球. SHUXK 要进行Q次操 ...
- bzoj4631踩气球
bzoj4631踩气球 题意: 有一个序列和一个区间集合,每次将序列中的一个数-1,求此时集合里有多少个区间和为0.序列大小≤100000,区间数≤100000,操作数≤100000. 题解: 此题解 ...
- 【BZOJ-4631】踩气球 线段树 + STL
4631: 踩气球 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 224 Solved: 114[Submit][Status][Discuss] ...
- BZOJ4631 : 踩气球
将所有盒子插入链表,每当一个盒子变空时,从链表里删去它. 查一下它的前驱后继$pre,nxt$,那么$[pre+1,nxt-1]$都是空的. 每次对于$[A,B]$这段都为空,对小朋友按$R$维护线段 ...
- 【bzoj4631】踩气球 线段树
题解: 真是很zz 我都想到线段树分治的思路了... 不过还是一道好题 首先跟线段树分治一样将区间投射到线段树上去 每次修改如果该个区间修改为0,则对他们对应的特定区间-1 这样每个区间会有一次变0, ...
- 【BZOJ4631】踩气球 题解(线段树)
题目链接 ---------------------- 题目大意:给定一个长度为$n$的序列${a_i}$.现在有$m$个区间$[l_i,r_i]$和$q$个操作,每次选取一个$x$使得$a_x--$ ...
随机推荐
- cp: omitting directory解决方案
cp: omitting directory是因为目录下面还有目录.应该使用递归方法.需要加入-r参数. 及:cp -r 该目录名.
- 一段曲折的copy路程
cp 的时候出现:-bash: /bin/cp: Argument list too longcp ./*.swf /www/img/html/xxx/action/ 解决办法:find ./ -n ...
- D. Little Artem and Dance---cf669D
http://codeforces.com/problemset/problem/669/D 题目大意: 有n对人 男生和女生 开始时 每个人的标号是(1,2,3,...n) 女生们围成一个圈 男 ...
- 代理服务器squid简介
Squid 是一个高性能.开源的代理缓存服务器和 Web 缓存进程,支持 FTP.Internet Gopher.HTTPS 和 SSL 等多种协议.它通过一个非阻塞的.I/O 事件驱动的单一进程处理 ...
- HDU 4279 Number(找规律)
Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- Meteor集合
在本教程中,我们将学习如何使用 MongoDB集合. 创建集合 我们可以使用以下代码来创建一个新的集合- meteorApp/client/main.js MyCollection = new Mon ...
- html 元素定位position-relative, absolute, fixed, static
看到这个,你有什么想法? Difference between static and relative positioning 如果你能完全看明白,那几本上css 元素定位的东西基本都会了.本文也不用 ...
- Android双列滑动表格(双表头不动)
※效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fil ...
- [NPM] npm check to update the dependencies
To update the dependencies in the project, we can run: npx npm-check -u
- 以Java属性文件的格式创建Hibernate的配置文件和DTD特殊符号作用
演示样例代码 hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.connection.driver_class=com.my ...