QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#698201#9528. New Energy VehiclewkrWA 0ms15864kbC++142.0kb2024-11-01 18:07:182024-11-01 18:07:18

Judging History

This is the latest submission verdict.

  • [2024-11-01 18:07:18]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 15864kb
  • [2024-11-01 18:07:18]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define close ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
const int N = 1e6;
int fi[N];
int ne[N];
int ls[N];
int val[N];
int c[N];
int pos[N];
int num[N];
void solved()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        fi[i] = m + 1;
        ne[i] = ls[i] = 0;
        cin >> val[i];
        c[i] = val[i];
    }
    for (int i = 1; i <= m; i++)
    {
        cin >> pos[i] >> num[i];
    }
    for (int i = 1; i <= m; i++)
    {
        int id = num[i];
        if (fi[id] == 0)
        {
            fi[id] = i;
        }
        if (ls[i])
        {
            ne[ls[i]] = i;
        }
        ls[i] = i;
    }
    for (int i = 1; i <= n; i++)
    {
        if (ls[i])
        {
            ne[ls[i]] = m + 1;
        }
    }
    set<array<int, 2>> st;
    for (int i = 1; i <= n; i++)
    {
        st.insert({fi[i], i});
    }
    int ans = 0;
    for (int i = 1; i <= m; i++)
    {
        int dis = pos[i] - pos[i - 1];
        while (!st.empty() && c[(*st.begin())[1]] <= dis)
        {
            int id = (*st.begin())[1];
            int value = c[id];
            dis -= value;
            ans += value;
            c[id] = 0;
            st.erase(st.begin());
        }
        if (st.empty() && dis > 0)
        {
            cout << ans << endl;
            return;
        }
        c[(*st.begin())[1]] -= dis;
        ans += dis;
        c[num[i]] = val[num[i]];
        auto place = st.find({i, num[i]});
        if (place != st.end())
        {
            st.erase(place);
        }
        int nePlace = ne[i];
        st.insert({nePlace, num[i]});
    }
    for (int i = 1; i <= n; i++)
    {
        ans += c[i];
    }
    cout << ans << endl;
}

signed main()
{
    close;
    int T;
    cin >> T;
    while (T--)
    {
        solved();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 15860kb

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

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
9
4
9
999999999
2000000000

result:

wrong answer 2nd lines differ - expected: '11', found: '9'