博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4631 : 踩气球
阅读量:6916 次
发布时间:2019-06-27

本文共 1419 字,大约阅读时间需要 4 分钟。

将所有盒子插入链表,每当一个盒子变空时,从链表里删去它。

查一下它的前驱后继$pre,nxt$,那么$[pre+1,nxt-1]$都是空的。

每次对于$[A,B]$这段都为空,对小朋友按$R$维护线段树,维护区间内$L$的最大值,不断询问$[1,B]$内$L$的最大值,如果$\geq A$则拿出来。

时间复杂度$O(m\log m)$。

 

#include
#include
#define N 100010int n,m,q,i,j,a[N],pre[N],nxt[N],c[N],v[262150],ans;struct P{int l,r;}b[N];inline bool cmp(const P&a,const P&b){return a.r
='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}inline int merge(int x,int y){return b[x].l>b[y].l?x:y;}void build(int x,int a,int b){ if(a==b){v[x]=a;return;} int mid=(a+b)>>1; build(x<<1,a,mid),build(x<<1|1,mid+1,b); v[x]=merge(v[x<<1],v[x<<1|1]);}void change(int x,int a,int b,int c){ if(a==b){v[x]=0;return;} int mid=(a+b)>>1; if(c<=mid)change(x<<1,a,mid,c);else change(x<<1|1,mid+1,b,c); v[x]=merge(v[x<<1],v[x<<1|1]);}int ask(int x,int a,int b,int d){ if(b<=d)return v[x]; int mid=(a+b)>>1,t=ask(x<<1,a,mid,d); if(d>mid)t=merge(t,ask(x<<1|1,mid+1,b,d)); return t;}inline void del(int x){ a[x]--; if(a[x])return; int l=pre[x],r=nxt[x]; nxt[l]=r,pre[r]=l; r=c[r-1]; if(!r)return; while(1){ int t=ask(1,1,m,r); if(b[t].l<=l)return; ans++; change(1,1,m,t); }}int main(){ read(n),read(m); for(i=1;i<=n;i++)read(a[i]),pre[i]=i-1,nxt[i]=i+1; for(i=1;i<=m;i++)read(b[i].l),read(b[i].r); std::sort(b+1,b+m+1,cmp); for(i=1;i<=m;i++)if(b[i].r!=b[i-1].r)for(j=b[i-1].r;j

  

转载地址:http://ulxcl.baihongyu.com/

你可能感兴趣的文章
linux lsof命令详解
查看>>
POJ 1163 The Triangle【dp+杨辉三角加强版(递归)】
查看>>
vue如何在路由跳转的时候更新组件
查看>>
Java多线程(二)
查看>>
《深入浅出数据分析》读后具体解释
查看>>
C++中的异常安全性
查看>>
Xcode中的变量模板(variable template)的使用方法
查看>>
java POI实现Excel单元格数据换行
查看>>
python3第一次作业
查看>>
国内物联网平台初探(三) ——QQ物联·智能硬件开放平台
查看>>
Python开源框架、库、软件和资源大集合
查看>>
透过IL看C# 开篇
查看>>
那是什么进程 —— wmpnscfg.exe是什么? 它为何运行?
查看>>
g++宏扩展
查看>>
《http权威指南》阅读笔记(七)
查看>>
webservices base64编码
查看>>
泛型数组
查看>>
设计模式的征途—4.抽象工厂(Abstract Factory)模式
查看>>
更换pip源到国内镜像
查看>>
Javascript 世界時區時間顯示
查看>>