Submission #1254083

#TimeUsernameProblemLanguageResultExecution timeMemory
1254083penguin133Closing Time (IOI23_closing)C++20
0 / 100
1095 ms8632 KiB
#include <bits/stdc++.h>
using namespace std;
#include "closing.h"
//#define int long long
using ll = long long;
#define pi pair<int, int>
#define pii pair<int, pi>
#define fi first
#define se second
#ifdef _WIN32
#define getchar_unlocked _getchar_nolock
#endif
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

ll e[200005];
int max_score(int N, int X, int Y, long long K,
              std::vector<int> U, std::vector<int> V, std::vector<int> W)
{
	ll x = X, y = Y;
	vector <ll> v;
	ll cur = 0;
	for(int i = 0; i < N - 1; i++)e[i] = W[i];
	for(int i = 1; i < N - 1; i++)e[i] += e[i - 1];
	for(int i = x - 1; i >= 0; i--){
		cur += W[i];
		v.push_back(cur);
	}
	cur = 0;
	for(int i = y + 1; i < N; i++){
		cur += W[i - 1];
		v.push_back(cur);
	}
	sort(v.begin(), v.end());
	for(int i = 1; i < (int)v.size(); i++)v[i] += v[i - 1];
	ll ans = 0;
	ll tot = 0;
	for(int i = x; i < N; i++){
		tot += e[i] - e[x];
		ll tmp = 0;
		for(int j = y; j >= 0; j--){
			tmp += e[y] - e[j];
			if(i >= j)tmp -= min(e[y] - e[j], e[j] - e[x]);
			int res = upper_bound(v.begin(), v.end(), K - tmp - tot) - v.begin();
			if(K - tmp - tot >= 0)ans = max(ans, res + (j - y + 1) + (i - x + 1));
		}
	}
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...