Pagini recente » Cod sursa (job #1331537) | Cod sursa (job #1971120) | Cod sursa (job #140661) | Cod sursa (job #519171) | Cod sursa (job #287168)
Cod sursa(job #287168)
#include <cstdio>
#include <set>
using namespace std;
typedef pair<int,int> p_ii;
typedef pair<int, pair<int,int> > p_ip;
#define mp make_pair
class cmp_p_ii { public: bool operator() ( const p_ii &a, const p_ii &b ) { return (a.second == b.second) ? a.first > b.first : a.second < b.second; } };
int main() {
freopen("hotel.in","rt",stdin);
freopen("hotel.out","wt",stdout);
int n,m;
set<p_ii, cmp_p_ii> C;
set<p_ip, greater<p_ip> > Q;
scanf("%d %d",&n,&m);
C.insert(mp(1,n));
Q.insert(mp(n,mp(1,n)));
for (int a,b,c; m; --m) {
scanf("%d",&c);
if (c == 1) {
scanf("%d %d",&a,&b);
b += a-1;
set<p_ii, cmp_p_ii>::iterator w = C.lower_bound(mp(a,b));
Q.erase(Q.find(mp(w->second - w->first + 1, *w)));
if (w->first < a) {
C.insert(mp(w->first,a-1));
Q.insert(mp(a - w->first, mp(w->first,a-1)));
}
if (b < w->second) {
C.insert(mp(b+1,w->second));
Q.insert(mp(w->second - b, mp(b+1,w->second)));
}
C.erase(w);
} else
if (c == 2) {
scanf("%d %d",&a,&b);
b += a-1;
set<p_ii, cmp_p_ii>::iterator right = C.lower_bound(mp(b,b));
set<p_ii, cmp_p_ii>::iterator left = C.lower_bound(mp(a-1,a-1));
p_ii new_pair(a,b);
if (right != C.end() && right->first == b+1) {
new_pair.second = right->second;
Q.erase(Q.find(mp(right->second - right->first + 1, *right)));
C.erase(right);
}
if (left != C.end() && left->second == a-1) {
new_pair.first = left->first;
Q.erase(Q.find(mp(left->second - left->first + 1, *left)));
C.erase(left);
}
C.insert(new_pair);
Q.insert(mp(new_pair.second - new_pair.first + 1,new_pair));
} else {
printf("%d\n",Q.begin()->first);
}
}
}