Pagini recente » Cod sursa (job #2241093) | Cod sursa (job #309592) | Borderou de evaluare (job #2013446) | Cod sursa (job #2127322) | Cod sursa (job #1695567)
#include <string.h>
#include <stdio.h>
#include <math.h>
int main() {
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
int n, p, i, j, k, l, r, count, result, dd, lelp, rilp;
scanf("%d%d", &n, &p);
int S = sqrt(n);
int one[333];
int two[100001];
memset(one, 0, sizeof(one));
memset(two, 0, sizeof(two));
for(i = 0; i < p; i++) {
scanf("%d", &k);
switch(k) {
case 1:
case 2:
scanf("%d%d", &l, &r);
r = l + r - 1;
lelp = (l - 1) / S + 1;
rilp = (r - 1) / S + 1;
for(j = S * lelp - S + 1; j <= S * lelp; j++) {
if(one[lelp] != 2) two[j] = one[lelp];
}
//printf("%d %d\n", lelp, rilp);
for(j = S * rilp - S + 1; j <= S * rilp; j++) {
if(one[rilp] != 2) two[j] = one[rilp];
}
// printf("-------------\n");
// for(dd = 1; dd <= n / S; dd++) {
// printf("%d ", one[dd]);
// }
// printf("\n");
// printf("\n");
// for(dd = 1; dd <= n; dd++) {
// printf("%d ", two[dd]);
// }
// printf("\n");
// printf("-------------\n");
one[lelp] = 2;
one[rilp] = 2;
for(j = l; j <= r; ) {
if( (j - 1) % S == 0 && j - 1 + S <= r) {
one[(j - 1) / S + 1] = (k == 1 ? 1 : 0);
j += S;
}
else {
two[j] = (k == 1 ? 1 : 0);
j ++;
}
//printf("%d\n", j);
}
break;
case 3:
// printf("-------------\n");
// for(dd = 1; dd <= n / S; dd++) {
// printf("%d ", one[dd]);
// }
// printf("\n");
// printf("\n");
// for(dd = 1; dd <= n; dd++) {
// printf("%d ", two[dd]);
// }
// printf("\n");
// printf("-------------\n");
count = 0, result = 0;
for(j = 1; j <= n;) {
if(one[(j - 1) / S + 1] == 0 && j + S - 1 <= n) {
count += S;
j += S;
}
else if (one[(j - 1) / S + 1] != 1 && two[j] == 0) {
count ++;
j ++;
}
else {
if( result < count ) {
result = count;
}
count = 0;
j++;
}
//printf("%d\n", count);
}
if( result < count ) {
result = count;
}
printf("%d\n", result);
break;
}
}
return 0;
}