Pagini recente » Cod sursa (job #1275966) | Cod sursa (job #2471553) | Cod sursa (job #308636) | Cod sursa (job #1895938) | Cod sursa (job #1372508)
#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;
}