Pagini recente » Cod sursa (job #1658320) | Cod sursa (job #1633787) | Cod sursa (job #626949) | Cod sursa (job #3268969) | Cod sursa (job #1512046)
#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 update(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)
update(node * 2, L, mij);
else update(node * 2 + 1, mij + 1, R);
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 + 1];
if(r[node * 2 + 1] == R - mij)
r[node] += r[node * 2];
h[node] = r[node * 2] + l[node * 2 + 1];
h[node] = max(h[node], max(l[node], r[node]));
}
else h[node] = max(h[node * 2], h[node * 2 + 1]);
}
}
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;
update(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;
update(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;
update(1, 1, n);
}
}
else fprintf(g, "%d\n", h[1]);
}
return 0;
}