订单编号 - 题目 - Daimayuan Online Judge
#include <bits/stdc++.h>
using namespace std;
int n;
set < pair<int, int> > c;
inline void insert(int l,int r) {
if(l > r)
return;
c.insert(make_pair(r, l));
}
int main() {
scanf("%d",&n);
//首先给它传入一个区间
//传的1-2e9
c.insert(make_pair(2e9, 1));
//每个去填
for(int i=1;i<=n;i++)
{
int x;scanf("%d",&x);
// 0-x
auto itr = c.lower_bound(make_pair(x, 0));
// 如果说在范围里,就分两段
if(itr->second <= x) {
printf("%d ",x);
// first指的是左端点,second指的是右端点
insert(itr->second,x-1);
insert(x+1,itr->first);
c.erase(itr);
} else {//否则在范围外,也就是走过了,直接找右端点(前面走完了这里是最小de)
printf("%d ",itr->second);
insert(itr->second+1,itr->first);
c.erase(itr);
}
}
return 0;
}