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--$ ...
随机推荐
- [Vijos1512] SuperBrother打鼹鼠 (二维树状数组)
传送门 直接搞就行. 注意下表re从零开始,而树状数组搞不了0,所以统一增加一个偏移量1. (话说数据随机是什么鬼?) # include <iostream> # include < ...
- Java SSH框架系列:用户登录模块的设计与实现思路
1.简介用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等.如果用户没有登录,用户就无法访问其他的一些jsp页面,甚至是action都不能访问.二.简单设计及实现本程序是基于Jav ...
- js获取json属性值的两种方法
1.json.XXX 2.json["XXX"] 第二种方法使用场景,当属性值是变量时.如图所示:
- HTTP请求示例
HTTP请求格式 当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成: l 请求方法URI协议/版本 l 请求头(Request Hea ...
- wordpress优化:Gravatar头像被墙及解决方案
网站缓存现象: 打开网站是左下角出现0.gravatar.com.1.gravatar.com或2.gravatar.com字样,网站一直处于缓存状态,迟迟未能打开.很多人都会缺乏耐心地等待一个网页的 ...
- 前端学习之--html
html 文件就是充当模板使用,包含head头和body身体,body包含众多的标签,每个标签都使用尖括号包裹,内部由标签名和标签属性构成.其中标签分为2类: 1:块级标签,特点:占用一行,如:< ...
- 使用fastjson将list、map转换成json,出现$ref
这是转换时出现的问题情况( map >> json ) 引用是通过"$ref"来表示的 引用 描述 "$ref":".." 上一 ...
- Date日期模式
package cn.zmh.Date; import java.text.SimpleDateFormat; import java.util.Date; public class DateDemo ...
- CEF3研究(二)
应用程序结构 每个CEF3应用程序都有一个相同的结构: 提供一个入口函数以初始化CEF和运行每个子进程逻辑和CEF消息处理 提供一个CefApp子类处理某个进程的回调 提供一个CefClinet子类处 ...
- Ansible 详细用法说明(一)
一.概述 运维工具按需不需要有代理程序来划分的话分两类: agent(需要有代理工具):基于专用的agent程序完成管理功能,puppet, func, zabbix agentless(无须代理工具 ...