Pagini recente » Cod sursa (job #2339732) | Cod sursa (job #1026994) | Cod sursa (job #2436813) | Cod sursa (job #506837) | Cod sursa (job #2335279)
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100000
int aint[4 * MAXN + 1];
bool loc[MAXN + 1]= {0};
int n, p, ramase;
ifstream fin("calorifer.in");
ofstream fout("calorifer.out");
void update1(bool value, int p, int left, int right, int st, int dr){
int m = (left + right) / 2;
if(left >= st && dr >= right){
for(int i = left; i <= dr; ++i)
loc[i] = value;
aint[p] = value;
return;
}
if(st <= m) update1(value, 2 * p, left, m, st, dr);
if(m < dr) update1(value, 2 * p + 1, m + 1, right, st, dr);
}
int query(){
int maxim = 0, ans = 0;
for(int i = 1; i <= n; ++i){
if(loc[i] != 0){
maxim = max(maxim, ans);
ans = 0;
}
else if(loc[i] == 0) ans++;
}
return maxim;
}
int main()
{
fin >> n >> p;
for(int i = 1; i <= p; ++i){
int type, st, dr;
fin >> type;
if(type == 1){
fin >> st >> dr;
dr = st + dr - 1;
update1(1, 1, 1, n, st, dr);
}
else if(type == 2){
fin >> st >> dr;
dr = st + dr - 1;
update1(0, 1, 1, n, st, dr);
}
else if(type == 3) fout << query() << '\n';
}
return 0;
}