|
ile (~scanf("%d%d", &n, &m)) {
tree.build();
vec.clear();
while (m--) {
scanf("%s", op);
if (op[0] == 'R') {
vec.clear();
puts("Reset Now");
tree.update(1, n, 1);
continue;
}
scanf("%d", &x);
if (op[0] == 'N') {
if (tree.msum[1] < x) {
puts("Reject New");
continue;
}
int l = tree.find(x);
printf("New at %d\n", l);
int r = l + x - 1;
tree.update(l, r, 0);
pii tp = mp(l, r);
j = lower_bound(vec.begin(), vec.end(), tp) - vec.begin();
vec.insert(vec.begin()+j, tp);
} else if (op[0] == 'G') {
if ((int) vec.size() < x)
puts("Reject Get");
else
printf("Get at %d\n", vec[x - 1].first);
} else if (op[0] == 'F') {
j = upper_bound(vec.begin(), vec.end(), mp(x, n + 3))
- vec.begin() - 1;
if (j == -1 || vec[j].first > x || vec[j].second < x)
//if(j == -1)
puts("Reject Free");
else {
printf("Free from %d to %d\n", vec[j].first, vec[j].second);
tree.update(vec[j].first, vec[j].second, 1);
vec.erase(vec.begin() + j);
}
}
}
puts("");
}
return 0;
}
|