Pagini recente » Cod sursa (job #1836019) | Cod sursa (job #2226521) | Cod sursa (job #2662871) | Cod sursa (job #1934731) | Cod sursa (job #1738766)
#include <fstream>
#define NMAX 500005
using namespace std;
ifstream f ("hotel.in");
ofstream g ("hotel.out");
int n , m , type , x , y;
struct tree {
int mx , st , dr;
};
tree arb[NMAX];
void update (int node , int inc , int sf , int ii , int si , int val) {
if (inc >= ii && sf <= si) {
if (val == 0)
arb[node].mx = arb[node].st = arb[node].dr = 0;
else
arb[node].mx = arb[node].st = arb[node].dr = sf - inc + 1;
return;
}
int mid = (inc + sf) / 2;
if (arb[node].mx == sf - inc + 1) {
arb[2 * node + 1].mx = arb[2 * node + 1].dr = arb[2 * node + 1].st = sf - mid;
arb[2 * node].mx = arb[2 * node].dr = arb[2 * node].st = mid - inc + 1;
}
if (arb[node].mx == 0) {
arb[2 * node + 1].mx = arb[2 * node + 1].dr = arb[2 * node + 1].st = 0;
arb[2 * node].mx = arb[2 * node].dr = arb[2 * node].st = 0;
}
if (mid >= ii) {
update (2 * node , inc , mid , ii , si , val);
}
if (mid < si) {
update (2 * node + 1 , mid + 1 , sf , ii , si , val);
}
arb[node].mx = max(arb[2 * node].mx , arb[2 * node + 1].mx);
arb[node].mx = max(arb[node].mx , arb[2 * node].dr + arb[2 * node + 1].st);
arb[node].st = arb[2 * node].st + arb[2 * node + 1].st * (arb[2 * node].st == mid - inc + 1);
arb[node].dr = arb[2 * node + 1].dr + arb[2 * node].dr * (arb[2 * node + 1].dr == sf - mid);
}
int main() {
f >> n >> m;
update(1 , 1 , n , 1 , n , 1);
for (int i = 1; i <= m; ++i) {
f >> type;
if (type == 3) {
g << arb[1].mx << '\n';
}
else {
f >> x >> y;
if (type == 1) {
update (1 , 1 , n , x , x + y - 1 , 0);
}
else {
update (1 , 1 , n , x , x + y - 1 , 1);
}
}
}
return 0;
}