Cod sursa(job #2146297)
Utilizator | Data | 27 februarie 2018 21:54:32 | |
---|---|---|---|
Problema | Hotel | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.22 kb |
#include <fstream>
#include <cmath>
#define nmax 100002
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
int n,m,vel,st,dr;
struct dfr
{
int msi,ms,md;
bool full=false;
bool empt=true;
};
dfr sqr[nmax];
int v[nmax];
int main()
{
fin>>n>>m;
double k1=sqrt((double)n);
int k=sqrt(n);
if(k!=k1)
k++;
for(int i=1;i<=k;i++)
{
sqr[i].msi=k;
sqr[i].ms=k;
sqr[i].md=k;
}
for(int i=1;i<=m;i++)
{
fin>>vel;
if(vel==3)
{
int sum=0;
int mas=0;
for(int i=1;i<=k;i++)
{
if(sqr[i].empt==true)
{
sum+=k;
mas=max(sum,mas);
}
else
{
if(sqr[i].full=true)
{
sum=0;
}
else
{
sum+=sqr[i].ms;
mas=max(sum,mas);
sum=sqr[i].md;
mas=max(sum,sqr[i].msi);
}
}
}
fout<<mas<<"\n";
}
else
{
if(vel==1)
{
fin>>st>>dr;
for(int i=1;i<=k;i++)
{
if(i*k>=st&&(i+1)*k<=dr)
{
sqr[i].full=true;
sqr[i].empt=false;
sqr[i].msi=0;
sqr[i].md=0;
sqr[i].ms=0;
}
}
}
else
{
fin>>st>>dr;
for(int i=1;i<=k;i++)
{
if(i*k>=st&&(i+1)*k<=dr)
{
sqr[i].full=false;
sqr[i].empt=true;
sqr[i].msi=k;
sqr[i].md=k;
sqr[i].ms=k;
}
}
}
}
}
return 0;
}