85pts玄关
查看原帖
85pts玄关
944410
lkxsg123楼主2023/10/17 21:18
#include<bits/stdc++.h>
using namespace std;
long long q[220000],l1,r1;
struct lyz
{
	long long aaa;
	long long sizee;
}a[200000+10];
long long head,tail;
long long qian[200000+10];
void cha()
{
	long long r;
	cin>>r;
	a[++head].aaa=r;
	a[head].sizee=r;
	qian[head]=qian[head-1]+a[head].sizee;
	while(l1<=r1&&q[l1]<=r)l1++;
	while(l1<=r1&&q[r1]<=r)r1--;
	q[++r1]=r;
}
void tan()
{
	long long r;
	scanf("%lld",&r);
	while(r>0)
	{
		r-=a[tail+1].sizee;
		while(l1<=r1&&q[l1]==a[tail].aaa)l1++;
		while(l1<=r1&&q[r1]==a[tail].aaa)r1--;
		tail++;
	}
	tail--;
	r+=a[tail+1].sizee;
	a[tail+1].sizee-=r;
}
void er_fen(long long l,long long r,long long k)
{	long long mid=(l+r)/2;
	if(l==r)
	{
		cout<<k<<endl;
	}
	else
	{
		
		if(k<=qian[mid]-qian[l-1]) er_fen(l,mid,k);
		else er_fen(mid+1,r,k-qian[mid]+qian[l-1]);
	}
}
void wen()
{
	long long r;
	scanf("%lld",&r);
	if(r<=a[tail+1].sizee)
	{
		cout<<a[tail+1].aaa-a[tail+1].sizee+r<<endl;
	}
	else
	er_fen(tail+2,head,r-a[tail+1].sizee);
}
void maxx()
{
	cout<<q[l1]<<endl;
}
int main()
{
	long long T;
	cin>>T;
	cin>>T;
	for(long long i=1;i<=T;i++)
	{
		int b;
		scanf("%d",&b);
		if(b==1) cha();
		if(b==2) tan();
		if(b==3) wen();
		if(b==4) maxx();
	}
}
2023/10/17 21:18
加载中...