Pagini recente » Cod sursa (job #57475) | Cod sursa (job #1109172) | Cod sursa (job #1202656) | Cod sursa (job #340161) | Cod sursa (job #1202939)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("hotel.in");
ofstream o("hotel.out");
struct camera{
bool dr,st;
int nr,l,r;
camera(){
dr = st = false;
nr = l = r = 0;
}
};
camera a[400004];
int n,p;
void update(int l,int r,int v,int nod,int q=1,int p=n){
if(l<=q && p<=r){
a[nod].l = a[nod].r = a[nod].nr = v*(p-q+1);
a[nod].dr = a[nod ].st=v;
return;
}
int m = (p+q)/2;
if(a[nod].nr==0){
a[nod*2].l = a[nod*2].r = a[nod*2].nr = a[nod*2].dr = a[nod*2 ].st=0;
a[nod*2+1].l = a[nod*2+1].r = a[nod*2+1].nr = a[nod*2+1].dr = a[nod*2+1 ].st=0;
}
if(a[nod].nr==(p-q+1)){
a[nod*2].l = a[nod*2].r = a[nod*2].nr =m-q+1;
a[nod*2].dr = a[nod*2 ].st = 1;
a[nod*2+1].l = a[nod*2+1].r = a[nod*2+1].nr =p-m;
a[nod*2+1].dr = a[nod*2+1 ].st= 1;
}
if(m>=l)update(l,r,v,nod*2,q,m);
if(m+1<=r)update(l,r,v,nod*2+1,m+1,p);
if(a[nod*2+1].dr){
a[nod].dr = 1;
if(a[nod*2+1].st && a[nod*2].dr && a[nod*2+1].r+a[nod*2+1].l==a[nod*2+1].nr*2) a[nod].r = a[nod*2+1].r+a[nod*2].r;
else a[nod].r = a[nod*2+1].r;
}else a[nod].dr = a[nod].r = 0;
if(a[nod*2].st){
a[nod].st = 1;
if(a[nod*2+1].st && a[nod*2].dr && a[nod*2].l + a[nod*2].r == 2*a[nod*2].nr) a[nod].l = a[nod*2+1].l+a[nod*2].r;
else a[nod].l = a[nod*2].l;
}else a[nod].st = a[nod].l = 0;
a[nod].nr = max(a[nod*2].nr,max(a[nod*2+1].nr,(a[nod*2].dr && a[nod*2+1].st?a[nod*2].r+a[nod*2+1].l:0)));
}
int main(){
f>>n>>p;
update(1,n,1,1,1,n);
// o<<a[1].nr;
int x,y,z;
for(int i=1;i<=p ;i++){
f>>x;
if(x==1){
f>>y>>z;
update(y,y-1+z,0,1);
}else if(x==2){
f>>y>>z;
update(y,y-1+z,1,1);
}else{
o<<a[1].nr<<"\n";
}
}
}