题目: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;
}