每个熊孩子抽象成平面上的一个点,横坐标为左边界,纵坐标为右边界,点权为区间长度,把第x个盒子拿空相当于把以(1,x)为左下角,(x,n)为右上角的矩形内的点减一,答案就是有多少个点等于0,因为每个点最多变成1次0所以当矩形内最小值等于0的时候就找到这个最小值然后把他设为INF并把答案+1即可

上述操作可以用KDT或者二维线段树之类的维护

复杂度O(n sqrt(n))

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<ctime>
#include<vector>
#include<stack>
#include<set>
#include<bitset>
#include<map>
#include<queue>
using namespace std;
#define MAXN 100010
#define MAXM 1010
#define MOD 1000000007
#define INF 1000000000
#define eps 1e-8
#define ll long long
struct pt{int x;int y;
};
int a[MAXN];
pt p[MAXN];
int n,m,q;
int la;
int LX=INF,LY=INF,RX,RY;
pt v[MAXN];
int val[MAXN],mn[MAXN],ch[MAXN];
pt L[MAXN],R[MAXN];
int tot;
int rt;
int son[MAXN][2];
bool cmpx(pt x,pt y){return x.x<y.x;
}
bool cmpy(pt x,pt y){return x.y<y.y;
}
inline void toch(int x,int y){if(!x){return ;}val[x]+=y;ch[x]+=y;mn[x]+=y;
}
inline void pd(int x){if(ch[x]){toch(son[x][0],ch[x]);toch(son[x][1],ch[x]);ch[x]=0;}
}
inline void ud(int x){mn[x]=val[x];if(son[x][0]){mn[x]=min(mn[x],mn[son[x][0]]);}if(son[x][1]){mn[x]=min(mn[x],mn[son[x][1]]);}
}void build(int &x,int l,int r,bool f){if(l>r){return ;}x=++tot;if(l==r){v[x]=L[x]=R[x]=p[l];mn[x]=val[x]=p[l].y-p[l].x+1;return ;}int mid=l+r>>1;if(f){nth_element(p+l,p+mid,p+r+1,cmpx);}else{nth_element(p+l,p+mid,p+r+1,cmpy);}v[x]=L[x]=R[x]=p[mid];val[x]=p[mid].y-p[mid].x+1;build(son[x][0],l,mid-1,f^1);build(son[x][1],mid+1,r,f^1);if(son[x][0]){L[x].x=min(L[x].x,L[son[x][0]].x);L[x].y=min(L[x].y,L[son[x][0]].y);R[x].x=max(R[x].x,R[son[x][0]].x);R[x].y=max(R[x].y,R[son[x][0]].y);}if(son[x][1]){L[x].x=min(L[x].x,L[son[x][1]].x);L[x].y=min(L[x].y,L[son[x][1]].y);R[x].x=max(R[x].x,R[son[x][1]].x);R[x].y=max(R[x].y,R[son[x][1]].y);}ud(x);
}void change(int x,int lx,int ly,int rx,int ry){if(L[x].x>rx||L[x].y>ry||R[x].x<lx||R[x].y<ly||!x){return ;}if(L[x].x>=lx&&L[x].y>=ly&&R[x].x<=rx&&R[x].y<=ry){toch(x,-1);return ;}pd(x);if(v[x].x>=lx&&v[x].y>=ly&&v[x].x<=rx&&v[x].y<=ry){val[x]--;}change(son[x][0],lx,ly,rx,ry);change(son[x][1],lx,ly,rx,ry);ud(x);
}
void find(int x){if(!x){return ;}if(!val[x]){val[x]=INF;la++;}pd(x);if(!mn[son[x][0]]){find(son[x][0]);}if(!mn[son[x][1]]){find(son[x][1]);}ud(x);
}
int main(){int i,x;scanf("%d%d",&n,&m);for(i=1;i<=n;i++){scanf("%d",&a[i]);}for(i=1;i<=m;i++){scanf("%d%d",&p[i].x,&p[i].y);}build(rt,1,m,1);scanf("%d",&q);while(q--){scanf("%d",&x);x=(x+la-1)%n+1;a[x]--;if(!a[x]){change(rt,1,x,x,n);}find(rt);printf("%d\n",la);}return 0;
}/*
5 3
1 2 1 2 1
1 5
1 5
1 5
7
1
2
3
4
5
2
4*/

BZOJ4631 踩气球相关推荐

  1. bzoj4631踩气球

    bzoj4631踩气球 题意: 有一个序列和一个区间集合,每次将序列中的一个数-1,求此时集合里有多少个区间和为0.序列大小≤100000,区间数≤100000,操作数≤100000. 题解: 此题解 ...

  2. BZOJ4631: 踩气球

    BZOJ4631: 踩气球 线段树 的 奇幻世界 题解: 在dalao fqk的模拟赛里我自己想出来的! 撒花 撒花 线段树维护气球,把一个孩子拆成若干个线段树上的区间,并放在对应线段树节点的vect ...

  3. [bzoj4631]踩气球

    题目大意 有一个序列,每次将一个位置的数减去1(保证这个数大于0) 有m个区间,每次操作后你都要输出有多少个区间和为0. 强制在线. 线段树搞搞 这m个区间可以被分割到线段树上的log个区间,那我们就 ...

  4. 【BZOJ-4631】踩气球 线段树 + STL

    4631: 踩气球 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 224  Solved: 114 [Submit][Status][Discuss ...

  5. 【bzoj4631】踩气球

    4631: 踩气球 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 372   Solved: 186 [ Submit][ Status][ Di ...

  6. bzoj 4631: 踩气球(线段树)

    4631: 踩气球 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 375  Solved: 189 [Submit][Status][Discuss ...

  7. 记萌新赛的命题过程与踩气球过程

    从命题环节开始记起吧,踩气球部分放在后半段压轴. 大约$20$天以前,那天早上我刚下火车,得知今年比赛命题组组长是$xiang578$,老师发的命题人员名单中并没有我.出于对命题工作的好奇与热爱,我向 ...

  8. noj 1142 F 踩气球

    Problem F 踩气球 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 六一儿童节,小朋友们做踩气球游戏,气球的编号是1-100,两位小朋友各踩了一些气球,要求他们报出自 ...

  9. 【算法实验二】--【回溯法】--踩气球

    1142.踩气球 时限:1000ms 内存限制:10000K  总时限:3000ms 描述 六一儿童节,小朋友们做踩气球游戏,气球的编号是1-100,两位小朋友各踩了一些气球,要求他们报出自己所踩气球 ...

最新文章

  1. 可分类系统的最小可分类单元
  2. Tableau必知必会之如何用颜色 突显 前N项和后N项
  3. qml demo分析(clocks-时钟)
  4. php数据库数据分割,使用PHP将分隔的值文件导入数据库时??,...
  5. 知识付费系统源码(最新开源知识付费系统搭建下载)
  6. FreeMarker模板引擎实现页面静态化
  7. 酷炫的可视化数据地图都是咋做的?10分钟学会
  8. 【Matlab 六自由度机器人】运动学逆解(附MATLAB机器人逆解代码)
  9. 如何加载CASS DAT格式文件
  10. 原来射极跟随器还有这个应用
  11. Vue computed自动计算对象中的属性
  12. php 完全前后端分离使用jwt,前后端分离,在 angular 8 中利用 JWT 进行身份认证
  13. 销售数据分析软件——让你不做糊涂账
  14. js 自动播放音频文件,报警提示音等
  15. Jenkins教程(六)脚本与方法执行效果不合预期,如何及时中止pipeline
  16. mysql快速复制数据库中所有表及数据至另一个库中
  17. mxGraph Tutorial
  18. RK3588平台开发系列讲解(SPI篇)SPI内核配置及驱动使用
  19. python资本市场财务数据分析_Python学习教程:用Python进行金融市场文本数据的情感计算...
  20. WPF ListBox等ItemsControl交替(Alternation)变化效果

热门文章

  1. 最小二乘法-圆拟合(不啰嗦)
  2. Python 游戏APP用户行为统计分析
  3. Python实现PSO粒子群优化循环神经网络LSTM分类模型项目实战
  4. 新型布局--弹性盒子
  5. java获取中国城市代码 中国城市ID
  6. 接下来教大家扫描照片怎么操作
  7. python写出表白_简单python 表白代码
  8. 微服务精通之Feign原理解析
  9. 为什么我用LaTeX排版的那个双引号编译出来很奇怪,如下图,怎么做才能出现对的?
  10. undefined reference to `__imp_glRotatef‘