QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#694148#9528. New Energy VehicleXwcWA 1ms7716kbC++141.8kb2024-10-31 17:21:222024-10-31 17:21:28

Judging History

This is the latest submission verdict.

  • [2024-10-31 17:21:28]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 7716kb
  • [2024-10-31 17:21:22]
  • Submitted

answer

#include <bits/stdc++.h>

#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)

typedef double ff;
typedef long long int ll;
typedef unsigned long long int ull;
using namespace std;

typedef pair<ll, ll> pii;

const int N = 2e5 + 10, M = 1e7, mod = 998244353;

ll n, m, a[N], b[N];

int nxt[N], x[N], t[N], suf[N];

bool vis[N];

void solve()
{
	cin >> n >> m;
	
	// init();
	
	for(int i = 1; i <= n; i ++ ) {
		cin >> a[i];
		b[i] = a[i];
		vis[i] = false;
	}
	
	for(int i = 1; i <= m; i ++ ) {
		cin >> x[i] >> t[i];
		vis[t[i]] = true;
		suf[i] = m + 1;
	}

	for(int i = m; i >= 1; i -- ) {
		nxt[i] = suf[t[i]];
		suf[t[i]] = i;
	}
	
	// for(int i = 1; i <= m; i ++ ) {
		// cout << t[i] << ' ' << nxt[i] << '\n';
	// }
	
	ll sum = 0;
	for(int i = 1; i <= n; i ++ ) {
		if(!vis[i]) sum += a[i];
	}
	
	priority_queue<int, vector<int>, greater<int> > q;
	
	for(int i = 1; i <= m; i ++ ) {
		q.push({i});
	}
	
	for(int i = 1; i <= m; i ++ ) {
		// now -> x[i]; t[i]
		ll dist = x[i] - x[i - 1];
		while(q.size()) {
			auto pos = q.top();
			
			int mn = min(dist, b[pos]);
			dist -= mn;
			b[pos] -= mn;
			
			if(dist <= 0) {
				break;
			}
			
			q.pop();
		}
		
		if(x[i] <= 0) {
			b[t[i]] = a[t[i]];
			if(nxt[t[i]] != m + 1) {
				q.push(nxt[t[i]]);
			} else {
				sum += a[t[i]];
			}
		} else {
			if(sum >= dist) {
				// cout << '?' << nxt[t[i]] << '\n';
				sum -= dist;
				b[t[i]] = a[t[i]];
				if(nxt[t[i]] != m + 1) {
					q.push(nxt[t[i]]);
				} else {
					sum += a[t[i]];
				}
			} else {
				cout << x[i - 1] + sum << '\n';
				return ;
			}
		}
	}
	
	// cout << x[m] << ' ' << sum << '\n';
	cout << x[m] + sum << '\n';
}

int main()
{
	fastio;

	int _ = 1;
	cin >> _;

	while( _ -- ) solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 7668kb

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
Wrong Answer
time: 1ms
memory: 7716kb

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:

8
12
5
12
0
2000000000

result:

wrong answer 1st lines differ - expected: '9', found: '8'