A 操作序列
https://ac.nowcoder.com/acm/contest/4462
题解:https://ac.nowcoder.com/discuss/369662
另一个题解给出了线段树的解法:https://blog.nowcoder.net/n/066d16beb8184993ae08ce476a668143
示例1
输入
7
140 1
120 2
100 3
120
100
-1
100
输出
0
3
3
0
示例2
输入
4
140 3
-1
140 1
-1
输出
3
1
示例3
输入
3
-1
-1
-1
输出
skipped
skipped
skipped
思路:
map
模拟。
Code:
#include <bits/stdc++.h>
using namespace std;
map<int, int> m;
int main()
{
int n, t, c;
char ch;
scanf("%d", &n);
while (n--)
{
scanf("%d%c", &t, &ch); //判断下一个字符ch是空格还是换行
if (ch == ' ')
{
scanf("%d", &c);
bool book = true;
for (int i = t - 30; i <= t + 30; i++) //[t-30,t+30]都是0
{
if (m.find(i) != m.end())
{
book = false;
break;
}
}
if (book)
{
m[t] = c;
}
}
else if (t == -1)
{
if (m.empty())
{
printf("skipped\n");
}
else
{
printf("%d\n", m.begin()->second);
m.erase(m.begin());
}
}
else
{
if (m.find(t) != m.end())
printf("%d\n", m[t]);
else
printf("0\n");
}
}
return 0;
}