QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#655616 | #7622. Yet Another Coffee | fls | TL | 0ms | 0kb | C++20 | 2.7kb | 2024-10-19 08:52:52 | 2024-10-19 08:52:53 |
answer
#include <bits/stdc++.h>
using namespace std;
#define qmx(a,b) a<b?b:a
#define qmn(a,b) a>b?b:a
#define ll long long
#define fr first
#define se second
const int mxn = 2e5+5;
priority_queue < pair<ll, int>, vector< pair<ll, int> >, greater< pair<ll, int>> >que;
priority_queue < ll, vector<ll>, greater<ll> > fq;
struct token{
int ri;
ll wi;
}wr[mxn];
ll a[mxn], mna[mxn], sufw[mxn], ans;
bool used[mxn];
inline bool cmp(struct token t1, struct token t2){
return t1.ri < t2.ri;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int test, di;
cin>>test;
while(test--){
int n, m;
cin >> n >> m;
mna[0] = 1;
for(int i = 1 ; i <= n ; i++){
cin >> a[i];
used[i] = false;
if(a[i] < a[mna[i - 1]])
mna[i] = i;
else
mna[i] = mna[i - 1];
}
for(int i = 1 ; i <= m ; i++){
cin >> wr[i].ri >> wr[i].wi;
}
sort(wr + 1, wr + 1 + m, cmp);
sufw[m + 1] = 0;
for(int i = m ; i >= 1 ; i--){
sufw[i] = sufw[i + 1] + wr[i].wi;
}
que.push(make_pair(a[mna[wr[1].ri]] - sufw[1], 1));
used[mna[wr[1].ri]] = true;
for(int i = 2 ; i <= m ; i++){
if(wr[i].ri == wr[i - 1].ri || mna[wr[i].ri] == mna[wr[i - 1].ri])
continue;
que.push(make_pair(a[mna[wr[i].ri]] - sufw[i], i));
used[mna[wr[i].ri]] = true;
}
for(int i = 1 ; i <= n ; i++){
if(!used[i]){
fq.push(a[i]);
}
}
ans = 0;
di = m + 1;
for(int pi, i = 1 ; i <= n ; i++){
if(!que.empty()){
while(que.top().second >= di){
pi = que.top().second;
fq.push(a[mna[wr[pi].ri]]);
que.pop();
}
}
if(!que.empty() && !fq.empty()){
if(que.top().first + sufw[di] < fq.top()){
ans += que.top().first + sufw[di];
di = que.top().second;
que.pop();
}else{
ans += fq.top();
fq.pop();
}
}else{
if(!que.empty()){
ans += que.top().first + sufw[di];
di = que.top().second;
que.pop();
}else{
ans += fq.top();
fq.pop();
}
}
cout << ans << " ";
}
cout << endl;
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Time Limit Exceeded
input:
5 10 14 17 37 59 65 53 73 68 177 160 111 10 177 5 193 2 30 3 63 2 339 3 263 5 178 2 190 9 23 10 328 10 200 9 8 3 391 6 230 12 9 152 306 86 88 324 59 18 14 42 260 304 55 3 50 2 170 1 252 7 811 1 713 7 215 10 201 4 926 8 319 19 20 182 74 180 201 326 243 195 31 170 263 284 233 48 166 272 281 179 116 31...
output:
-2596 -2559 -2506 -2447 -2382 -2314 -2241 -2130 -1970 -1793