Cod sursa(job #2510592)

Utilizator eusebiu_alexandruMorar Eusebiu eusebiu_alexandru Data 16 decembrie 2019 22:00:40
Problema Hotel Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<fstream>
#define nmax 100005
using namespace std;
ifstream f ("hotel.in");
ofstream g ("hotel.out");
struct ele
{
  int sol,st,dr;
};
ele v[4*nmax];
int i,j,a,b,cati,cerinta,valoare,mij,n,p,lg;
void update(int nod,int st,int dr)
{
    if(st==dr)
    {
        v[nod].sol=valoare;
        v[nod].dr=valoare;
        v[nod].st=valoare;
        return;
    }
      int  mij=(st+dr)/2;
    if(a<=mij)
       update(2*nod,st,mij);
    if(b>mij)
       update(2*nod+1,mij+1,dr);
    v[nod].st=v[nod*2].st;
    v[nod].dr=v[nod*2+1].dr;
    v[nod].sol=v[nod*2].dr+v[nod*2+1].st;
    if(v[nod*2].sol>v[nod].sol)
         v[nod].sol=v[nod*2].sol;
    if(v[nod*2+1].sol>v[nod].sol)
         v[nod].sol=v[nod*2+1].sol;
     if(v[2*nod].st==mij-st+1)
        v[nod].st+=v[2*nod+1].st;
    if(v[2*nod+1].dr==dr-mij)
        v[nod].dr+=v[2*nod].dr;
}
int main()
{
 f>>n>>p;
 valoare=1;
 a=1,b=n;
 update(1,1,n);
 while(p)
 {
   p--;
   f>>cerinta;
   if(cerinta==1)
   {
       f>>a>>lg;
       valoare=0;
       b=a+lg-1;
       update(1,1,n);
   }
   if(cerinta==2)
   {
       f>>a>>lg;
       valoare=1;
       b=a+lg-1;
       update(1,1,n);
   }
   if(cerinta==3)
    g<<v[1].sol<<'\n';
 }
}