#11和hack TLE
代码
#include <bits/stdc++.h>
using namespace std;
#define IT set<node>::iterator
int n, op, m, ans;
long long l, r;
struct node {
long long l, r;
mutable bool v;
node(long long L, long long R = -1, bool V = 0):l(L), r(R), v(V) {}
bool operator< (const node &T) const {
return l < T.l;
}
} ;
set<node> s;
IT split(long long pos) {
IT it = s.lower_bound(pos);
if(it != s.end() && it -> l == pos) return it;
--it;
long long l = it -> l, r = it -> r;
bool v = it -> v;
s.erase(it);
s.insert(node(l, pos - 1, v));
return s.insert(node(pos, r, v)).first;
}
void assign(long long l, long long r, int val) {
IT itr = split(r + 1), itl = split(l);
s.erase(itl, itr);
s.insert(node(l, r, val));
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> m;
s.insert(node(1, n, 0));
while(m--) {
cin >> op >> l;
if(op == 2) {
cin >> r;
assign(l, l + r - 1, 0);
} else {
IT itr = split(n + 1), itl = split(1);
int sum = 0, st = 1, fl = 0;
for(IT it = itl; it != itr; it++) {
if(it -> v == 0) sum += (it -> r) - (it -> l) + 1;
else {
if(sum >= l) {
assign(st, st + l - 1, 1), fl = st;
break;
} else {
st = (it -> r) + 1, sum = 0;
}
}
}
if(sum >= l && !fl) assign(st, st + l - 1, 1), fl = st;
cout << fl << endl;
}
}
return 0;
}