渣代码,写了好长时间。。。。不过得满分还是很开心的,又get到几点知识,开森。
int main()
{
priority_queue<int,vector<int>,greater<int>>q; //q记录最左边的空着的下标
int n, k;
cin >> n >> k;
vector<int>key(n + 1, 0);
for (int i = 1; i <= n; ++i)
key[i] = i;
unordered_set<int> s,ss;
unordered_map<int, vector<int>>m;
int bianhao, start, c;
while (k--)
{
cin >> bianhao >> start >> c;
m[start].push_back(bianhao);
m[start + c].push_back(bianhao);
ss.insert(start);
ss.insert(start + c);
}
vector<int>time;
for (auto i : ss)
time.push_back(i);
sort(time.begin(), time.end());
for (auto i : time)
{
sort(m[i].begin(), m[i].end());
for (int j=0;j<m[i].size();++j)
{
if (s.find(m[i][j]) != s.end()) //归还
{
s.erase(m[i][j]);
int tmp = q.top();
q.pop();
key[tmp] = m[i][j];
m[i][j] = -1;
}
}
for (int j = 0; j < m[i].size(); ++j) //取
{
if (m[i][j] > 0)
{
s.insert(m[i][j]);
for (int a = 1; a <= key.size(); ++a)
if (key[a] == m[i][j])
{
q.push(a);
break;
}
}
}
}
for (int i = 1; i <= n; ++i)
cout << key[i] << " ";
return 0;
}int m