Pagini recente » Cod sursa (job #1258383) | Cod sursa (job #596921) | Cod sursa (job #987843) | Cod sursa (job #1325218) | Cod sursa (job #1800831)
#include <cstdio>
using namespace std;
int k, tip, val, n, m, x, y, Sol, Arb[400088];
inline void Update(int st, int dr, int nod){
if(st == dr && x <= st && st <= y){Arb[nod] += val; return ;}
int mij = (st + dr) / 2;
if(mij >= x) Update(st, mij, nod * 2);
if(mij < y) Update(mij + 1, dr, nod * 2 + 1);
Arb[nod] = Arb[nod * 2] + Arb[nod * 2 + 1];
}
inline void Query(int st, int dr, int nod){
if(st == dr){
if(Arb[nod] == 0) ++k;
else k = 0;
if(k > Sol) Sol = k;
return ;
}
int mij = (st + dr) / 2;
if(mij >= 1) Query(st, mij, nod * 2);
if(mij < n) Query(mij + 1, dr, nod * 2 + 1);
}
int main()
{
freopen("hotel.in", "r", stdin);
freopen("hotel.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= m ; ++i){
scanf("%d", &tip);
if(tip == 1){
scanf("%d%d", &x, &y);
y += x - 1; val = 1;
Update(1, n, 1);
}else if(tip == 2){
scanf("%d%d", &x, &y);
y += x - 1; val = -1;
Update(1, n, 1);
}else{
Sol = 0; k = 0;
Query(1, n, 1);
printf("%d\n", Sol);
}
}
return 0;
}