Cod sursa(job #1372508)

Utilizator StefanMudragMudrag Stefan StefanMudrag Data 4 martie 2015 13:54:03
Problema Hotel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include<iostream>
#include<fstream>
#define NMAX 100001
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
struct nod{int val,s,p,uz;};
nod arb[NMAX];
int n,m,x,y,op;
void build(int nod,int st,int dr)
{
    if(st==dr)
    {
        arb[nod].val=1;
        arb[nod].s=1;
        arb[nod].p=1;
        arb[nod].uz=1;
        return ;
    }
    int mij=(st+dr)>>1;
    build(2*nod,st,mij);
    build(2*nod+1,mij+1,dr);
    arb[nod].val=arb[nod].s=arb[nod].p=arb[2*nod].val+arb[2*nod+1].val;
    if(arb[2*nod].uz&&arb[2*nod+1].uz)
        arb[nod].uz=1;
}
void update(int nod,int st,int dr)
{  //cout<<nod<<'\n';
    if(x<=st&&dr<=y)
    { //cout<<nod<<'\n';
       if(op==1)
      arb[nod].val=arb[nod].p=arb[nod].s=arb[nod].uz=0;
      else
      {
           arb[nod].uz=1;
      }
        return;
    }
    int mij=(st+dr)>>1;
    if(x<=mij) update(2*nod,st,mij);
    if(y>mij)update(2*nod+1,mij+1,dr);
      arb[nod].p=arb[2*nod].p;

      arb[nod].s=arb[2*nod+1].s;

      if(!(arb[2*nod].uz&&arb[2*nod+1].uz))
        arb[nod].uz=0;
      if(arb[2*nod+1].uz)

         arb[nod].s=arb[2*nod].s+arb[2*nod+1].p;

}

int main()
{   int a,b;
    fin>>n>>m;
    build(1,1,n);

 /* for(int i=1;i<=m;i++)
  {
      fin>>op;
      if(op<=2)
      {
          fin>>a>>b;
          x=a;y=a+b-1;
          update(1,1,n);
      }
      else
      {
          cout<<arb[1].val<<'\n';
      }
  }*/
  x=2;y=4;op=1;

  update(1,1,n);
  op=2;
  x=2;y=2;
  update(1,1,n);
  cout<<arb[17].s;
    return 0;
}