Pagini recente » Cod sursa (job #2667913) | Cod sursa (job #2727992) | Cod sursa (job #208226) | Cod sursa (job #657905) | Cod sursa (job #1538582)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
const int BMAX = 500;
const int NMAX = 400000;
char buffer[BMAX + 1];
int bpoz = BMAX - 1;
struct hotel{
int mx,l,r;
}v[NMAX];
int lazy[NMAX];
void parsare(int &x){
while(!isdigit(buffer[bpoz])){
bpoz++;
if(bpoz == BMAX){
bpoz = 0;
fin.read(buffer,BMAX);
}
}
x = 0;
while(isdigit(buffer[bpoz])){
x = x * 10 + (buffer[bpoz] - '0');
bpoz++;
if(bpoz == BMAX){
bpoz = 0;
fin.read(buffer,BMAX);
}
}
}
void buildtree(int nod,int l,int r){
v[nod].mx = v[nod].l = v[nod].r = r - l + 1;
int mij = (l+r) >> 1;
if(l == r)
return ;
buildtree(nod * 2 + 1,mij + 1,r);
buildtree(nod * 2,l,mij);
}
void update(int nod,int l,int r,int m,int M,int q){
if(l >= m && r <= M){
if(q == 1)
v[nod].mx = v[nod].l = v[nod].r = 0;
else
v[nod].mx = v[nod].l = v[nod].r = r - l + 1;
return ;
}
int mij = (l + r) >> 1;
if(v[nod].mx == 0){
v[2 * nod].mx = v[2 * nod].l = v[2 * nod].r = 0;
v[2 * nod + 1].mx = v[2 * nod + 1].l = v[2 * nod + 1].r = 0;
}
if(v[nod].mx == r - l + 1){
v[2 * nod].mx = v[2 * nod].l = v[2 * nod].r = mij - l + 1;
v[2 * nod + 1].mx = v[2 * nod + 1].l = v[2 * nod + 1].r = r - mij;
}
if(m <= mij)
update(2 * nod,l,mij,m,M,q);
if(M > mij)
update(2 * nod + 1,mij+1,r,m,M,q);
int mx = max(v[2 * nod].mx,v[2 * nod + 1].mx);
if( v[2*nod].r + v[2*nod + 1].l > mx){
v[nod].mx = v[2*nod].r + v[2*nod + 1].l;
if(v[2 * nod].l == mij - l + 1)
v[nod].l = v[nod].mx;
else
v[nod].l = v[2*nod].l;
if( v[nod * 2 + 1].r == r - mij)
v[nod].r = v[nod].mx;
else
v[nod].r = v[2*nod+1].r;
} else {
v[nod].mx = mx;
v[nod].l = v[2*nod].l;
v[nod].r = v[2*nod+1].r;
}
}
int main()
{
int n,m,x,M,q;
parsare(n); parsare(m);
buildtree(1,1,n);
for(int i = 1; i <= m; i++){
parsare(q);
if(q == 3)
fout << v[1].mx << "\n";
else{
parsare(x); parsare(M);
if(q == 1)
update(1,1,n,x,x + M-1,1);
if(q == 2)
update(1,1,n,x, x + M-1,2);
}
}
return 0;
}