Pagini recente » Cod sursa (job #1648027) | Cod sursa (job #1293759) | Cod sursa (job #2348819) | Cod sursa (job #2318743) | Cod sursa (job #3167340)
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
class nod
{
public :
ll st=0,dr=0,mx=0,l=0;
};
class AINT
{
ll n,h;
vector<nod>v;
vector<ll>d;
public:
AINT(ll x=0){n=x,h=sizeof(int) * 8 - __builtin_clz(n),v.resize(2*n+3);d.resize(n+2);}
void build()
{
ll i;
for(i=0;i<n;i++)v[n+i].st=v[n+i].dr=v[n+i].mx=v[n+i].l=1,d[i]=0;
for(i=n-1;i>0;i--)v[i].st=v[i].dr=v[i].mx=v[i].l=v[2*i].mx+v[2*i+1].mx;
}
void apply(ll x,ll val)
{
//cerr<<"apply "<<x<<endl;
if(val==-1)
v[x].st=v[x].dr=v[x].mx=v[x].l;
else if(val==1)
v[x].st=v[x].dr=v[x].mx=0;
if(x<n)
d[x]+=val;
}
nod combine(nod a,nod b)
{
nod rez;
rez.st=(a.mx==a.l ? a.l+b.st:a.st);
rez.dr=(b.mx==b.l ? b.l+a.dr : b.dr);
rez.mx=max(max(a.mx,b.mx),a.dr+b.st);
rez.l=a.l+b.l;
return rez;
}
void push(ll p)
{
ll i,j;
for(i=h;i>0;i--)
{
j=p>>i;
//cerr<<"push "<<p<<' '<<j<<endl;
apply(j<<1,d[j]);
apply(j<<1|1,d[j]);
d[j]=0;
}
}
void upi(ll x)
{
while(x>1)
{
x>>=1;
if(d[x]!=0)continue;
v[x]=combine(v[2*x],v[2*x+1]);
//cerr<<x<<' '<<v[x].mx<<' '<<v[2*x].l<<' '<<v[2*x+1].l<<endl;
}
}
void set(ll p,ll l,ll val)
{
//cerr<<"sase "<<v[6].l<<endl;
ll p0,l0;
p+=n;
push(p);
push(p+l);
l=p+l;
p0=p;
l0=l;
//cerr<<p<<' '<<l<<endl;
for(;p<l;p>>=1,l>>=1)
{
//cerr<<p<<' '<<l<<endl;
if(p&1)apply(p++,val);
if(l&1)apply(--l,val);
}
//cerr<<"sase "<<v[6].l<<endl;
upi(p0);
upi(l0-1);
}
ll ask()
{
nod rezl,rezr;
ll l=n,r=2*n;
for(;l<r;l>>=1,r>>=1)
{
if(l&1)rezl=combine(rezl,v[l++]);
if(r&1)rezr=combine(v[--r],rezr);
}
return combine(rezl,rezr).mx;
}
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
ll n,m,c,x,y;
cin>>n>>m;
AINT alex(n);
alex.build();
while(m--)
{
cin>>c;
//cerr<<c<<endl;
if(c==3)
{
cout<<alex.ask()<<'\n';
continue;
}
cin>>x>>y;
if(c==1)
{
alex.set(x-1,y,1);
}
if(c==2)
{
alex.set(x-1,y,-1);
}
//cerr<<'c'<<' '<<alex.ask()<<endl;
//cerr<<"_____________________-\n";
}
return 0;
}