Submission #1018774

#TimeUsernameProblemLanguageResultExecution timeMemory
1018774vjudge1Izbori (COCI22_izbori)C++17
40 / 110
67 ms18020 KiB
#include <bits/stdc++.h>
#define fast cin.tie(0)->sync_with_stdio(0);
#define int long long
#define inf ((int)1e18)
using namespace std;

void solve1(int n) {
	vector <int> arr(n);
	for(int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	auto compress = [&](vector <int> &a) {
		vector <pair<int, int> > v(a.size());
		for(int i = 0; i < n; i++) {
			v[i] = {a[i], i};
		}
		sort(v.begin(), v.end());
		for(int i = 0, ind = 0; i < n; i++) {
			if(i and v[i].first != v[i - 1].first) ind++;
			a[v[i].second] = ind;
		}
	};
	compress(arr);
	int ans = 0;
	for(int l = 0; l < n; l++) {
		vector <int> cnt(n);
		int mx = 0;
		for(int r = l; r < n; r++) {
			cnt[arr[r]]++;
			mx = max(mx, cnt[arr[r]]);
			if(mx > (r - l + 1) / 2) ans++;
		}
	}
	cout << ans << "\n";
}

void solve2(int n) {
	vector <int> arr(n+1), pre(n+1);
	for(int i = 1; i <= n; i++) {
		cin >> arr[i];
		if(arr[i] == 2) arr[i] = -1;
		pre[i] = arr[i] + pre[i-1];
	}
	int sub = 0;
	map <int, int> mp;
	for(int i = n; i > 0; i--) {
		mp[pre[i]]++;
		sub += mp[pre[i - 1]];
	}
	cout << n * (n + 1) / 2 - sub << "\n";
}

int32_t main(){
	fast
	int n;
	cin >> n;
	if(n <= 2000) solve1(n);
	else solve2(n);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...