QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#752710#9528. New Energy VehicleTmonkeyWA 4ms12028kbC++202.6kb2024-11-16 09:24:442024-11-16 09:24:45

Judging History

This is the latest submission verdict.

  • [2024-11-16 09:24:45]
  • Judged
  • Verdict: WA
  • Time: 4ms
  • Memory: 12028kb
  • [2024-11-16 09:24:44]
  • Submitted

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];
pii j[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];
    }
    set<pii> q;
    for (int i = 1; i <= m; i++)
    {
        cin >> jl[i] >> id[i];
        q.insert({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.begin());
            // cout << u << ' ' << v << '\n';
            q.erase(q.begin());
            if (now[v] < ned)
            {
                ans += now[v];
                ned -= now[v];
                now[v] = 0;
            }
            else
            {
                ans += ned;
                now[v] -= ned;
                ned = 0;

                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.insert({*it, id[i]});
                }
                q.insert({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.insert({*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: 4ms
memory: 11732kb

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: 4ms
memory: 12028kb

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'