QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#711004 | #9528. New Energy Vehicle | 0x3fffffff | WA | 0ms | 3816kb | C++23 | 2.1kb | 2024-11-04 23:43:37 | 2024-11-04 23:43:41 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
#define int long long
using PII = pair<int, int>;
template<class T, class Cmp = less<T>>
struct Heap {
priority_queue<T, vector<T>, Cmp>qPush, qErase;
void insert(T x) {
qPush.emplace(x);
}
void erase(T x) {
qErase.emplace(x);
}
T top() {
while (!qErase.empty() && qPush.top() == qErase.top())
qPush.pop(), qErase.pop();
return qPush.top();
}
void pop() {
while (!qErase.empty() && qPush.top() == qErase.top())
qPush.pop(), qErase.pop();
qPush.pop();
}
int size() {
return (int)qPush.size() - (int)qErase.size();
}
};
void solve() {
int n, m;cin >> n >> m;
vector<int>a(n + 1);
Heap<PII>q;
for (int i = 1;i <= n;i++) {
cin >> a[i];
q.insert({ a[i],i });
}
auto b = a;
vector<int>x(m + 1), t(m + 1);
for (int i = 1;i <= m;i++) {
cin >> x[i] >> t[i];
}
LL sum = 0;
for (int i = 1;i <= m;i++) {
if (q.size() == 0)break;
int now = b[t[i]];
if (sum + now >= x[i]) {
sum = x[i];
}
else {
sum += now;
q.erase({ b[t[i]],t[i] });
b[t[i]] = 0;
while (q.size() and sum + q.top().first < x[i]) {
sum += q.top().first;
q.pop();
}
if (!q.size())break;
LL res = x[i] - sum;
sum = x[i];
auto [t, id] = q.top();q.pop();
q.insert({ t - res,id });
b[id] = t - res;
q.insert({ a[i],i });
}
}
while (q.size()) {
sum += q.top().first;
q.pop();
}
cout << sum << "\n";
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
int T = 1;
#ifdef LOCAL
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif
cin >> T;
while (T--)
solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3596kb
input:
2 3 1 3 3 3 8 1 2 2 5 2 1 2 2 1
output:
12 9
result:
ok 2 lines
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3816kb
input:
6 3 2 2 2 2 6 1 7 1 2 2 3 3 2 1 6 2 2 3 2 2 5 1 7 2 9 1 2 2 3 3 2 1 6 2 1 1 999999999 1000000000 1 1 1 1000000000 1000000000 1
output:
10 11 4 11 999999999 2000000000
result:
wrong answer 1st lines differ - expected: '9', found: '10'