Pagini recente » Cod sursa (job #3151950) | Cod sursa (job #1691205) | Cod sursa (job #1970456) | Borderou de evaluare (job #1796731) | Cod sursa (job #2393907)
#include <fstream>
using namespace std;
int v[2*1000000+1],p[100002];
int n,q,st,dr,nr,ii,val,poz,maxim,tip,c;
void init(int nod,int st,int dr)
{
if(st==dr)
{
p[st]=nod;
return;
}
int mij=(st+dr)/2;
init(2*nod,st,mij);
init(2*nod+1,mij+1,dr);
}
void add(int nod,int st,int dr)
{
if(st==dr)
{
v[nod]=val;
return;
}
int mij=(st+dr)/2;
if(poz<=mij)
add(2*nod,st,mij);
else
add(2*nod+1,mij+1,dr);
v[nod]=max(v[2*nod],v[2*nod+1]);
}
int main()
{
ifstream in("hotel.in");
ofstream out("hotel.out");
in>>n>>q;
init(1,1,n);
for(int i=1;i<=q;i++)
{
in>>tip;
if(tip==1)
{
in>>ii>>nr;
for(int j=ii;j<=ii+nr-1;j++)
{
poz=j;
val=1;
add(1,1,n);
}
}
if(tip==2)
{
in>>ii>>nr;
for(int j=ii;j<=ii+nr-1;j++)
{
poz=j;
val=0;
add(1,1,n);
}
}
if(tip==3)
{
maxim=0;
c=0;
for(int j=1;j<=n;j++)
{
if(v[p[j]]==0)
c++;
else
{
if(c>maxim)
maxim=c;
c=0;
}
}
if(c>maxim)
maxim=c;
out<<maxim<<"\n";
}
}
return 0;
}