Pagini recente » Cod sursa (job #2099557) | Cod sursa (job #2158864) | Cod sursa (job #2747892) | Cod sursa (job #1423618) | Cod sursa (job #1512043)
#include <bits/stdc++.h>
#define L first
#define R second
using namespace std;
int h[500000];
int l[500000];
int r[500000];
int val, poz;
void updateA(int node, int L, int R) {
if(L == R) {
h[node] = val;
l[node] = val;
r[node] = val;
return ;
}
int mij = (R - L) / 2 + L;
if(L <= poz && poz <= R) {
if(poz <= mij)
updateA(node * 2, L, mij);
else updateA(node * 2 + 1, mij + 1, R);
h[node] = 0;
l[node] = l[node * 2];
r[node] = r[node * 2 + 1];
if(r[node * 2] && l[node * 2 + 1]) {
if(l[node * 2] == mij - L + 1)
l[node] = l[node * 2] + l[node * 2 + 1];
if(r[node * 2 + 1] == R - mij)
r[node] = r[node * 2 + 1] + r[node * 2];
h[node] = r[node * 2] + l[node * 2 + 1];
}
h[node] = max(h[node], h[node * 2]);
h[node] = max(h[node], h[node * 2 + 1]);
h[node] = max(h[node], l[node]);
h[node] = max(h[node], r[node]);
}
}
int main()
{
FILE *f = fopen("hotel.in", "r");
FILE *g = fopen("hotel.out", "w");
int n, m;
fscanf(f, "%d %d", &n, &m);
val = 1;
for(int i = 1; i <= n; i ++) {
poz = i;
updateA(1, 1, n);
}
int tip, j, k;
for(int i = 1; i <= m; i ++) {
fscanf(f, "%d", &tip);
if(tip == 1) {
fscanf(f, "%d %d", &j, &k);
k += j;
val = 0;
for(int l = j; l < k; l ++) {
poz = l;
updateA(1, 1, n);
}
}
else if(tip == 2) {
fscanf(f, "%d %d", &j, &k);
k += j;
val = 1;
for(int l = j; l < k; l ++) {
poz = l;
updateA(1, 1, n);
}
}
else fprintf(g, "%d\n", h[1]);
}
return 0;
}