//整体二分 主要是第K大!!! 开long long
#include <cstring>
#include <cstdio>
#include <iostream>
#define m(a,b) memset(a,b,sizeof a)
using namespace std;
typedef long long ll;
template<class T>void rd(T &x)
{
x=0;int f=0;char ch=getchar();
while(ch<'0'||ch>'9') {f|=(ch=='-');ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
x=f?-x:x;
return;
}
const int N=5e4+5,INF=0x3f3f3f3f;
struct node{int l,r;ll k;int op,id;}q[N<<1],a[N<<1],b[N<<1];
ll ans[N];int n;
ll tag[N<<2],sum[N<<2];
void pushdown(int l,int r,int pos)
{
if(!tag[pos]) return;
int mid=(l+r)>>1;
tag[pos<<1]+=tag[pos],tag[pos<<1|1]+=tag[pos];
sum[pos<<1]+=tag[pos]*(mid-l+1),sum[pos<<1|1]+=tag[pos]*(r-mid);
tag[pos]=0;
}
void update(int cl,int cr,int val,int l,int r,int pos)
{
if(cl<=l&&r<=cr){
sum[pos]+=val*(r-l+1),tag[pos]+=val;
return;
}
pushdown(l,r,pos);
int mid=(l+r)>>1;
if(cl<=mid) update(cl,cr,val,l,mid,pos<<1);
if(cr>mid) update(cl,cr,val,mid+1,r,pos<<1|1);
sum[pos]=sum[pos<<1]+sum[pos<<1|1];
}
ll query(int cl,int cr,int l,int r,int pos)
{
if(cl<=l&&r<=cr) return sum[pos];
pushdown(l,r,pos);
int mid=(l+r)>>1;ll res=0;
if(cl<=mid) res+=query(cl,cr,l,mid,pos<<1);
if(cr>mid) res+=query(cl,cr,mid+1,r,pos<<1|1);
return res;
}
void whole(int l,int r,int L,int R)
{
if(L>R) return;
if(l==r){
for(int i=L;i<=R;++i)
if(q[i].op==2) ans[q[i].id]=l;
return;
}
int mid=(l+r)>>1,na=0,nb=0;
for(int i=L;i<=R;++i)
{
if(q[i].op==1)
{
if(q[i].k>mid) update(q[i].l,q[i].r,1,1,n,1),b[++nb]=q[i];
else a[++na]=q[i];
}
else
{
ll res=query(q[i].l,q[i].r,1,n,1);
if(res>=q[i].k) b[++nb]=q[i];
else a[++na]=q[i],a[na].k-=res;
}
}
for(int i=1;i<=na;++i) q[L+i-1]=a[i];
for(int i=1;i<=nb;++i)
{
if(b[i].op==1) update(b[i].l,b[i].r,-1,1,n,1);
q[L+na-1+i]=b[i];
}
whole(l,mid,L,L+na-1);
whole(mid+1,r,L+na,R);
}
int main()
{
int m;rd(n),rd(m);
int ovo=0;
for(int i=1;i<=m;++i)
{
rd(q[i].op),rd(q[i].l),rd(q[i].r),rd(q[i].k);
if(q[i].op==2) q[i].id=++ovo;
}
whole(-n,n,1,m);
for(int i=1;i<=ovo;++i) printf("%lld\n",ans[i]);
}
bzoj3110-K大数查询(动态第k大查询 区间更新 树套树/整体二分)
最新推荐文章于 2021-08-21 20:02:23 发布