QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#726570#9528. New Energy VehicleExile_CodeRE 11ms70708kbC++202.1kb2024-11-09 03:01:042024-11-09 03:01:05

Judging History

This is the latest submission verdict.

  • [2024-11-09 03:01:05]
  • Judged
  • Verdict: RE
  • Time: 11ms
  • Memory: 70708kb
  • [2024-11-09 03:01:04]
  • Submitted

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;
}



詳細信息

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

output:


result: