hdu 2871 Memory Control 伸展树区间合并(二)

2014-11-23 21:34:22 · 作者: · 浏览: 12
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; }