QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#689106 | #9528. New Energy Vehicle | hamster | ML | 0ms | 3640kb | C++23 | 1.3kb | 2024-10-30 15:20:04 | 2024-10-30 15:20:04 |
Judging History
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();
}
Details
Tip: Click on the bar to expand more detailed information
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