Pagini recente » Cod sursa (job #2780912) | Cod sursa (job #3004428) | Cod sursa (job #2764817) | Cod sursa (job #338268) | Cod sursa (job #1202937)
#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(p==q){
a[nod].l = a[nod].r = a[nod].nr = a[nod].dr = a[nod ].st=v;
return;
}
int m = (p+q)/2;
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);
a[nod].nr = max(a[nod*2].nr,max(a[nod*2+1].nr,a[nod*2].r+a[nod*2+1].l));
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;
}
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";
}
}
}