QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#743364 | #9528. New Energy Vehicle | mumu_sir# | WA | 10ms | 58544kb | C++14 | 2.8kb | 2024-11-13 19:01:41 | 2024-11-13 19:01:41 |
Judging History
answer
#include <bits/stdc++.h>
#define int long long
using namespace std;
#define YES "YES"
#define NO "NO"
#define all(a) a.begin(), a.end()
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pii;
const double eps = 1e-9;
const int N = 2e6 + 10;
const int M = 2e5 + 10;
const int INF = 1e16 + 100;
const int mod = 998244353;
const int base = 23333;
mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count());
int mx[N], now[N];
int jl[N], id[N];
vector<int> e[N];
void solve()
{
int n, m;
cin >> n >> m;
vector<int> flag(n + 5);
for(int i = 1;i <= n;i++)
{
cin >> mx[i];
now[i] = mx[i];
}
auto cmp = [&](pii a, pii b)
{
return a.first > b.first;
};
priority_queue <pii, vector<pii>, decltype(cmp)> q(cmp);
for(int i = 1;i <= m;i++)
{
cin >> jl[i] >> id[i];
q.push({i, id[i]});
e[id[i]].push_back(i);
flag[id[i]]++;
}
int pre = 0, sy = 0, ans = 0;
for(int i = 1;i <= n;i++)
{
if(!flag[i]) sy += now[i];
}
for(int i = 1;i <= m;i++)
{
int ned = jl[i] - pre;
while(!q.empty() && ned > 0)
{
auto [u, v] = q.top();
q.pop();
if(now[v] < ned)
{
ans += now[v];
ned -= now[v];
now[v] = 0;
}
else
{
ans += ned;
now[v] -= ned;
ned = 0;
if(id[i] == v)
{
if(i == e[id[i]].back()) sy += mx[id[i]];
else now[id[i]] = mx[id[i]];
}
else
{
if(i == e[id[i]].back()) sy += mx[id[i]];
else
{
auto it = upper_bound(all(e[id[i]]), i);
now[id[i]] = mx[id[i]];
q.push({*it, id[i]});
}
}
q.push({u, v});
}
}
if(ned > sy)
{
ans += sy;
sy = 0;
break;
}
else if(ned > 0)
{
ans += ned;
sy -= ned;
auto it = upper_bound(all(e[id[i]]), i);
if(it == e[id[i]].end()) sy += mx[id[i]];
else
{
now[id[i]] = mx[id[i]];
q.push({*it, id[i]});
}
}
pre = jl[i];
}
ans += sy;
cout << ans << '\n';
for(int i = 1;i <= m;i++) e[id[i]].clear();
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
while (t--) solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 8ms
memory: 58544kb
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: 10ms
memory: 58292kb
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:
9 12 4 12 999999999 2000000000
result:
wrong answer 2nd lines differ - expected: '11', found: '12'