80分求调!

题目:https://www.xinyoudui.com/ac/contest/747003D59000534021010B6/problem/6878
题目描述
时间:1s 空间:256M
题目描述:
有一个数组
a
a,下标范围是[

1
0
9
,
1
0
9
−10
9
,10
9
],初始值是
0
0,
q
q次操作,

操作1是修改操作,操作2是查询操作:

1

x

y
1 x y 修改
a
x
a
x

+=
y
y,
y
y 范围是[

1
0
9
,
1
0
9
−10
9
,10
9
]。

2

x
2 x 查询
a
x
a
x

有没被修改过,如果有,则输出 “YES”,否则输出 “NO”

q
q 次操作后,输出所有被操作过的下标以及它们对应的值,每行两个整数

输入格式:
第一行包含一个整数
q
q,表示操作次数。

每次操作的输入格式如题面所示。

输出格式:
对于每次操作 2 输出一行 “YES” 或 “NO”

操作完后,输出若干行,每行两个整数代表所有被操作过的下标以及它们对应的值。按照被操作过的下标从小到大输出。

样例1输入:
5
2 -1
1 -1 1
2 -1
1 1000000000 1000000000
1 -1 -1
样例1输出:
NO
YES
-1 0
1000000000 1000000000
约定与提示:
1

q

3

1
0
5
1≤q≤3⋅10
5
80tps 后两点wa了

#include <bits/stdc++.h>
using namespace std;

const int Q = 3e5+1;
map<int, pair<int, bool>> mp;
int q, chg[Q], t;

int main() {
cin >> q;
while (q–) {
int op; cin >> op;
if (op == 1) {
int x, y; cin >> x >> y;
if (!mp.second) chg[++t] = x;
mp = {mp.first+y, 1};
}
if (op == 2) {
int x; cin >> x;
cout << (mp.second ? “YES” : “NO”) << endl;
}
}
sort(chg+1, chg+t+1);
for (int i = 1; i <= t; ++i)
cout << chg[i] << " " << mp[chg[i]].first << endl;
return 0;
}

截图:SHIFT+WIN+S

1 个赞