Cod sursa(job #459261)

Utilizator APOCALYPTODragos APOCALYPTO Data 28 mai 2010 18:25:06
Problema Hotel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb

#include<iostream>
#include<fstream>

using namespace std;
#define common int m=(l+r)/2,L=2*n,R=L+1
int A[300005],B[300005],C[300005],S[300005],N,P;

ofstream fout("hotel.out");

void update(int n,int l,int r,int ql,int qr,int x)
{
    if(ql<=l&&qr>=r)
    {
        C[n]=1;
        A[n]=1;
        B[n]=1;
        if(x==1)
        S[n]=1;
        else
        S[n]=0;
        return ;
    }
    common;
    if(ql<=m)
       update(L,l,m,ql,qr,x);
    if(m<qr)
       update(R,m+1,r,ql,qr,x);
    A[n]=max(A[L],S[L]+B[L]);
    B[n]=max(B[R],S[R]+A[L]);
    C[n]=max(max(C[L],C[R]),A[R]+B[L]);
    S[n]=S[L]+S[L];
}
void cit()
{int i,x,y,z;
    ifstream fin("hotel.in");
fin>>N>>P;
for(i=1;i<=P;i++)
{ fin>>x>>y>>z;
  if(x==1||x==2)
   update(1,1,N,y,y+z-1,x);
   else
   fout<<C[1]<<"\n";
}
fin.close();
}

int main()
{   cit();
    fout.close();
    return 0;
}