#include <iostream>
#include <set>
#include <unordered_map>
#include <vector>
using namespace std;
set <pair<int,int>> khoang_trong;
unordered_map<int, int> map_id;
vector<pair<int,int>> file[12005];
int cnt;
int n;
void init(int N) {
for(int i=0;i<cnt;i++){
file[i].clear();
}
cnt=0;
map_id.clear();
khoang_trong.clear();
n=N;
khoang_trong.insert(make_pair(1,N));
return;
}
int add(int mId, int mSize) {
if(n<mSize) return -1;
map_id[mId]=cnt;
int ans=khoang_trong.begin()->first;
while(mSize>0){
auto it=khoang_trong.begin();
int st=(*it).first;
int e=(*it).second;
khoang_trong.erase(it);
int vang=e-st+1;
if(vang<mSize) {
mSize-=vang;
file[cnt].push_back(make_pair(st,e));
n-=vang;
}
else if(vang==mSize){
n-=vang;
file[cnt].push_back(make_pair(st,e));
break;
}
else{
n-=mSize;
file[cnt].push_back(make_pair(st,st+mSize-1));
khoang_trong.insert(make_pair(st+mSize,e));
break;
}
}
cnt++;
return ans;
}
int remove(int mId) {
auto it=map_id.find(mId);
int id=it->second;
map_id.erase(it);
int ans;
ans=file[id].size();
for(auto i:file[id]){
int st=i.first;
int e=i.second;
n+=e-st+1;
auto it1=khoang_trong.lower_bound(make_pair(st,e));
auto it2=it1;
if(it1!=khoang_trong.begin()){
it2--;
if(it2->second+1==st){
st=it2->first;
khoang_trong.erase(it2);
}
}
if(it1!=khoang_trong.end()){
if(e+1==it1->first){
e=it1->second;
khoang_trong.erase(it1);
}
}
khoang_trong.insert(make_pair(st,e));
}
file[id].clear();
map_id.erase(mId);
return ans;
}
int count(int mStart, int mEnd) {
int ans=0;
for(int i=0; i<cnt;i++){
if(!file[i].empty()){
for(auto it:file[i]){
if(it.second<mStart||it.first>mEnd) continue;
ans++;
break;
}
}
}
return ans;
}