QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#744870#9528. New Energy VehiclessxWA 2ms9940kbC++202.2kb2024-11-14 00:07:402024-11-14 00:07:41

Judging History

This is the latest submission verdict.

  • [2024-11-14 00:07:41]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 9940kb
  • [2024-11-14 00:07:40]
  • Submitted

answer

#include<bits/stdc++.h>

using namespace std;

#define pll pair<ll, ll>
#define ll long long
const int mod = 1e9 + 7;
const int N = 3e5 + 50;

struct Node
{
    ll a, b, c;
};
struct cmp 
{
    bool operator () (const Node& a, const Node& b)
    {
        return a.a > b.a;
    }
};

vector<ll> e[N];
ll tot[N], a[N], st[N], x[N], t[N], s[N];
ll n, m;

void solve()
{
    priority_queue<Node, vector<Node>, cmp> q;
    ll ans = 0;
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        s[i] = a[i];
    }
    for (int i = 1; i <= m; i++) cin >> x[i] >> t[i];
    for (int i = 1; i <= m; i++)
    {
        e[t[i]].push_back(x[i]);
        if (st[t[i]] == 0)
        {
            st[t[i]] = 1;
            q.push({x[i], t[i], tot[t[i]]});
            //tot[t[i]] ++;
        }
    }
    for (int i = 1; i <= n; i++)
    {
        if (st[i] == 0) q.push({(ll)1e18, i, 0});
    }
    for (int i = 1; i <= m; i++)
    {
        ll tx = x[i] - x[i - 1];
        while (tx > 0)
        {
            if (q.size() == 0) break;
            auto it = q.top();
            q.pop();
            if (it.c != tot[it.b]) continue;
            //cout << it.b << '\n';
            if (tx - s[it.b] > 0)
            {
                ans += s[it.b];
                tx -= s[it.b];
                s[it.b] = 0;
            }
            else
            {
                ans += tx;
                s[it.b] -= tx;
                tx = 0;
                if (s[it.b] > 0) q.push({it.a, it.b, it.c});
            }
        }
        if (q.size() == 0) break;
        tot[t[i]] ++;
        s[t[i]] = a[i];
        if (tot[t[i]] < e[t[i]].size()) q.push({e[t[i]][tot[t[i]]], t[i], tot[t[i]]});
        else q.push({(ll)1e18, t[i], tot[t[i]]});
    }
    //cout << ans << '\n';
    if (q.size() > 0)
    {
        for (int i = 1; i <= n; i++) ans += s[i];
    }
    cout << ans << '\n';

    for (int i = 0; i <= n + 10; i++)
    {
        e[i].clear();  tot[i] = 0;
        st[i] = 0;
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    ll 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: 2ms
memory: 9768kb

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: 9940kb

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:

6
11
4
11
999999999
1000000000

result:

wrong answer 1st lines differ - expected: '9', found: '6'