QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#678617 | #7787. Maximum Rating | yumingsk# | WA | 0ms | 3784kb | C++20 | 3.2kb | 2024-10-26 15:33:14 | 2024-10-26 15:33:14 |
Judging History
answer
#pragma GCC optimize(3, "Ofast", "inline")
#include <iostream>
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define INF 0x3f3f3f3f
#define L_INF 0x7f3f3f3f3f3f3f3f
#define db cout << "debug\n";
using namespace std;
const int Mod = 998244353;
using ll = long long;
void solve()
{
int n, m;
cin >> n >> m;
vector<int> a(n + 1, 0);
vector<int> b(n + 1, 0);
ll sum_fu = 0;
ll sum_zh = 0;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
if (a[i] > 0)
sum_zh += a[i];
else if (a[i] < 0)
sum_fu += -a[i];
}
set<pair<int, int>> sepre;
set<pair<int, int>> sesuf;
ll sum_pre = 0;
for (int i = 1; i <= n; i++)
{
if (a[i] > 0)
sesuf.insert({a[i], i});
}
while (sum_pre <= sum_fu && sesuf.size())
{
sepre.insert(*sesuf.begin());
b[(*sesuf.begin()).second] = 1;
sum_pre += (*sesuf.begin()).first;
sesuf.erase(*sesuf.begin());
}
// cout << sesuf.size() << '\n';
// for (auto v : sesuf)
// {
// cout << v.first << ' ' << v.second << '\n';
// }
while (m--)
{
int p, v;
cin >> p >> v;
// cout << "a[p]" << a[p] << ' ' << b[p] << '\n';
if (b[p] == 1)
{
// if (sepre.size())
// for (auto v : sepre)
// {
// cout << v.first << ' ' << v.second << '\n';
// }
sepre.erase(sepre.find({a[p], p}));
b[p] = 0;
sum_pre -= a[p];
// cout << "siz" << ' ' << sepre.size() << '\n';
}
else
{
if (a[p] > 0)
{
// cout << a[p] << ' ' << p << '\n';
sesuf.erase(sesuf.find({a[p], p}));
sum_zh -= a[p];
}
else
{
sum_fu -= -a[p];
}
}
if (v > 0)
{
sum_zh += v;
sesuf.insert({v, p});
}
else
{
sum_fu += -v;
}
while (sum_pre <= sum_fu && sesuf.size())
{
sepre.insert(*sesuf.begin());
b[(*sesuf.begin()).second] = 1;
sum_pre += (*sesuf.begin()).first;
sesuf.erase(*sesuf.begin());
}
a[p] = v;
// cout << m << " ";
// for (auto v : sepre)
// {
// cout << v.first << ' ' << v.second << '\n';
// }
// cout << sum_pre << ' ' << ' ' << sum_fu << '\n';
// cout << sepre.size() << " " << sesuf.size() << '\n';
cout << sepre.size() + sesuf.size() - (sum_pre <= sum_fu ? 0 : sesuf.size() + 1) + 1 << '\n';
}
}
int main()
{
// IOS;
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#ifndef ONLINE_JUDGE
clock_t start_time = clock();
#endif
int t = 1;
// cin >> t;
while (t--)
{
solve();
}
#ifndef ONLINE_JUDGE
cout << "Used " << (double)(clock() - start_time) << " ms" << endl;
#endif
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3784kb
input:
3 5 1 2 3 3 4 2 -2 1 -3 3 1 2 1
output:
1 2 2 2 3
result:
ok 5 number(s): "1 2 2 2 3"
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3524kb
input:
3 5 1 2 3 3 4 2 -2 1 3 3 1 2 1
output:
1 2 1 2 2
result:
wrong answer 5th numbers differ - expected: '1', found: '2'