BZOJ4631 踩气球
每个熊孩子抽象成平面上的一个点,横坐标为左边界,纵坐标为右边界,点权为区间长度,把第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 踩气球相关推荐
- bzoj4631踩气球
bzoj4631踩气球 题意: 有一个序列和一个区间集合,每次将序列中的一个数-1,求此时集合里有多少个区间和为0.序列大小≤100000,区间数≤100000,操作数≤100000. 题解: 此题解 ...
- BZOJ4631: 踩气球
BZOJ4631: 踩气球 线段树 的 奇幻世界 题解: 在dalao fqk的模拟赛里我自己想出来的! 撒花 撒花 线段树维护气球,把一个孩子拆成若干个线段树上的区间,并放在对应线段树节点的vect ...
- [bzoj4631]踩气球
题目大意 有一个序列,每次将一个位置的数减去1(保证这个数大于0) 有m个区间,每次操作后你都要输出有多少个区间和为0. 强制在线. 线段树搞搞 这m个区间可以被分割到线段树上的log个区间,那我们就 ...
- 【BZOJ-4631】踩气球 线段树 + STL
4631: 踩气球 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 224 Solved: 114 [Submit][Status][Discuss ...
- 【bzoj4631】踩气球
4631: 踩气球 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 372 Solved: 186 [ Submit][ Status][ Di ...
- bzoj 4631: 踩气球(线段树)
4631: 踩气球 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 375 Solved: 189 [Submit][Status][Discuss ...
- 记萌新赛的命题过程与踩气球过程
从命题环节开始记起吧,踩气球部分放在后半段压轴. 大约$20$天以前,那天早上我刚下火车,得知今年比赛命题组组长是$xiang578$,老师发的命题人员名单中并没有我.出于对命题工作的好奇与热爱,我向 ...
- noj 1142 F 踩气球
Problem F 踩气球 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 六一儿童节,小朋友们做踩气球游戏,气球的编号是1-100,两位小朋友各踩了一些气球,要求他们报出自 ...
- 【算法实验二】--【回溯法】--踩气球
1142.踩气球 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 六一儿童节,小朋友们做踩气球游戏,气球的编号是1-100,两位小朋友各踩了一些气球,要求他们报出自己所踩气球 ...
最新文章
- 可分类系统的最小可分类单元
- Tableau必知必会之如何用颜色 突显 前N项和后N项
- qml demo分析(clocks-时钟)
- php数据库数据分割,使用PHP将分隔的值文件导入数据库时??,...
- 知识付费系统源码(最新开源知识付费系统搭建下载)
- FreeMarker模板引擎实现页面静态化
- 酷炫的可视化数据地图都是咋做的?10分钟学会
- 【Matlab 六自由度机器人】运动学逆解(附MATLAB机器人逆解代码)
- 如何加载CASS DAT格式文件
- 原来射极跟随器还有这个应用
- Vue computed自动计算对象中的属性
- php 完全前后端分离使用jwt,前后端分离,在 angular 8 中利用 JWT 进行身份认证
- 销售数据分析软件——让你不做糊涂账
- js 自动播放音频文件,报警提示音等
- Jenkins教程(六)脚本与方法执行效果不合预期,如何及时中止pipeline
- mysql快速复制数据库中所有表及数据至另一个库中
- mxGraph Tutorial
- RK3588平台开发系列讲解(SPI篇)SPI内核配置及驱动使用
- python资本市场财务数据分析_Python学习教程:用Python进行金融市场文本数据的情感计算...
- WPF ListBox等ItemsControl交替(Alternation)变化效果