Cod sursa(job #1386193)

Utilizator tdr_drtTdr Drt tdr_drt Data 12 martie 2015 19:50:34
Problema Hotel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<fstream>
using namespace std;
ifstream f("hotel.in");
ofstream g("hotel.out");
int n,m,k,x,y;

struct betsy{
 int x,y,val;
}a[300000];

void sfill(int x,int val){
  a[x].x=a[x].y=a[x].val=val;
}

void update(int nod,int st,int dr,int x,int y,int op){
 if(x<=st&&dr<=y)
    if(op==1) sfill(nod,0);
       else sfill(nod,dr-st+1);
  else{
    int mid=(st+dr)/2;
    if(!a[nod].val) sfill(nod*2,0),sfill(nod*2+1,0);
    if(a[nod].val==dr-st+1)
        sfill(nod*2,mid-st+1),sfill(nod*2+1,dr-mid);
    if(x<=mid) update(nod*2,st,mid,x,y,op);
    if(mid<y) update(nod*2+1,mid+1,dr,x,y,op);
    a[nod].val=max(a[nod*2].val,a[nod*2+1].val);
    a[nod].val=max(a[nod].val,a[nod*2].y+a[nod*2+1].x);
    a[nod].x=a[nod*2].x;
    a[nod].y=a[nod*2+1].y;
    if(a[2*nod].x==mid-st+1) a[nod].x+=a[nod*2+1].x;
    if(a[2*nod+1].y==dr-mid) a[nod].y+=a[nod*2].y;
    }
}

int main(){
  f>>n>>k;
  update(1,1,n,1,n,2);
  while(k--){
    f>>x;
    if(x==3) g<<a[1].val<<"\n";
    else if(x==2) f>>x>>y,y+=x-1,update(1,1,n,x,y,2);
    else f>>x>>y,y+=x-1,update(1,1,n,x,y,1);
  }

 return 0;
}