Pagini recente » Cod sursa (job #3363016) | Cod sursa (job #3362514) | Cod sursa (job #3363015) | Cod sursa (job #3363013) | Cod sursa (job #3363012)
#include <stdio.h>
#define MAXN 131072
struct nod {
int secv, pref, suf;
} arb[2 * MAXN];
void build(int n) {
int p2, i;
p2 = n / 2;
while (p2) {
for (i = p2; i < 2 * p2; i++) {
arb[i].pref = arb[2 * i].pref;
arb[i].suf = arb[2 * i + 1].suf;
arb[i].secv = arb[2 * i].suf + arb[2 * i + 1].pref;
if (arb[i].secv == n / p2) {
arb[i].pref = arb[i].suf = arb[i].secv;
}
}
p2 /= 2;
}
}
int main() {
FILE *fin, *fout;
int n, p, p2, op, pr, l, i, j;
fin = fopen("hotel.in", "r");
fout = fopen("hotel.out", "w");
fscanf(fin, "%d%d", &n, &p);
p2 = 1;
while (p2 < n) {
p2 *= 2;
}
for (i = p2; i < p2 + n; i++) {
arb[i].secv = arb[i].pref = arb[i].suf = 1;
}
n = p2;
build(n);
for (i = 1; i <= p; i++) {
fscanf(fin, "%d", &op);
switch (op) {
case 3:
fprintf(fout, "%d\n", arb[1].secv);
break;
default:
fscanf(fin, "%d%d", &pr, &l);
for (j = n + pr - 1; j < n + pr + l - 1; j++) {
arb[j].secv = arb[j].pref = arb[j].suf = op - 1;
}
build(n);
}
}
fclose(fin);
fclose(fout);
return 0;
}