QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#689106#9528. New Energy VehiclehamsterML 0ms3640kbC++231.3kb2024-10-30 15:20:042024-10-30 15:20:04

Judging History

This is the latest submission verdict.

  • [2024-10-30 15:20:04]
  • Judged
  • Verdict: ML
  • Time: 0ms
  • Memory: 3640kb
  • [2024-10-30 15:20:04]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

template<class... Args> void _(Args... args) {
    auto print = [&](auto x) { cout << x << " "; };
    cout << "--->";
    int arr[] = {(print(args), 0)...};
    cout << "\n";
}
void Solve() {
    int n,m;ll sum=0;cin>>n>>m;
    vector<int> a(n+1),his(n+1);
    for(int i=1;i<=n;i++) cin>>a[i],sum+=a[i];
    set<array<int,2>> st;
    vector<array<int,2>> site(m+1);
    for(int i=1;i<=m;i++) {
        cin>>site[i][0]>>site[i][1];
        if(sum<site[i][0]) {
            break;
        }
        st.insert({site[i-1][0]+1,site[i][0]});
        ll s=site[his[site[i][1]]][0]+1;
        ll ener=a[site[i][1]];
        while (true) {
            auto iter=st.lower_bound({s,0});
            auto [fi,se]=*iter;
            st.erase(iter);
            int deta=se-fi+1;
            if(deta>ener) {
                sum+=ener;
                st.insert({fi+ener,se});
                break;
            }
            sum+=deta;ener-=deta;
            if(se==site[i][0]) {
                break;
            }
            his[site[i][1]]=i;
        }
    }
    cout<<sum<<endl;
}

signed main() {
    int Task = 1;
    cin >> Task;
    while (Task--) Solve();
}

詳細信息

Test #1:

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

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
Memory Limit Exceeded

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
24

result: