QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#726570 | #9528. New Energy Vehicle | Exile_Code | RE | 11ms | 70708kb | C++20 | 2.1kb | 2024-11-09 03:01:04 | 2024-11-09 03:01:05 |
Judging History
answer
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <vector>
#include <set>
#include <map>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cstdlib>
#include <algorithm>
#include <list>
#include <string>
#include <cmath>
#include <bitset>
#include <stack>
#include <math.h>
#include <functional>
#include <unordered_map>
#include <unordered_set>
#include <numeric>
#include <cstdint>
#include <iomanip>
using namespace std;
#define int ll
#define ll long long
#define pii pair<int,int>
#define endl '\n'
#define vv vector
#define all(x) x.begin()+1,x.end()
#define cy cout<<"Yes"<<endl
#define cn cout<<"No"<<endl;
int a[100010],b[100010];
queue<int> q[100010];
struct node
{
int u, dian, nex;
bool operator<(const node& x)const
{
return nex > x.nex;
}
};
void solve() {
int n, m; cin >> n >> m;
for (int i = 1; i <= n; i++)cin >> a[i];
for (int i = 1; i <= m; i++)
{
int x, t; cin >> x >> t;
b[i] = x;
q[t].push(x);
}
for (int i = 1; i <= n; i++)q[i].push(1e18);
priority_queue<node>q1,q0;
for (int i = 1; i <= n; i++)q1.push({ i, a[i], q[i].front() });
int ans = 0;
for (int i = 1; i <= m; i++)
{
int dx = b[i] - b[i - 1];
while (dx && q1.size())
{
auto t = q1.top(); q1.pop();
if (t.dian > dx)t.dian -= dx, dx = 0, q1.push(t);
else dx -= t.dian, t.dian = 0, q0.push(t);
}
if (dx == 0)
{
ans += b[i] - b[i - 1];
if (q1.top().nex == b[i])
{
auto t = q1.top(); q1.pop();
t.dian = a[t.u];
q[t.u].pop(); t.nex = q[t.u].front();
q1.push(t);
}
else
{
auto t = q0.top(); q0.pop();
t.dian = a[t.u];
q[t.u].pop(); t.nex = q[t.u].front();
q1.push(t);
}
}
else
{
ans += b[i] - b[i - 1] - dx;
break;
}
}
while(q1.size())
{
ans+=q1.top().dian;
q1.pop();
}
cout << ans << endl;
for (int i = 1; i <= n; i++)
{
while (q[i].size())q[i].pop();
}
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ll _ = 1;
cin >> _;
while (_--)
solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 11ms
memory: 70708kb
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
Runtime Error
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