100742024-03-26 12:23:05CWMBarátokcpp17Elfogadva 100/100134ms24736 KiB
#include <iostream>
#include <optional>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;
#define int long long

struct fenwick_tree {
	vector<int> fwt;
	vector<int> base;
	fenwick_tree(vector<int>& input) {
		base = input;
		vector<int> prefixSum(input.size()+1);
		prefixSum[0] = 0;
		for (size_t i = 1; i < input.size()+1; i++)
		{
			prefixSum[i] = prefixSum[i - 1] + input[i-1];
		}
		fwt.push_back(prefixSum[0]);
		for (size_t i = 1; i < input.size()+1; i++)
		{
			int range = i - (i & (i - 1));
			fwt.push_back(prefixSum[i] - prefixSum[i - range]);
		}
	}
	int sumRange(int beg, int end) {
		end++;
		return sumFromBeginning(end) - sumFromBeginning(beg);
	}
	int sumFromBeginning(int end) {
		int sum = 0;
		while (end != 0) {
			sum += fwt[end];
			end = (end & (end - 1));
		}
		return sum;
	}
	void update(int idx, int newVal) {
		int dif = newVal - base[idx];
		base[idx] = newVal;
		idx++;
		while (idx < fwt.size()) {
			fwt[idx] += dif;
			int range = idx - (idx & (idx - 1));
			idx = (idx & (idx - 1)) + 2*range;
		}
	}
};

signed main()
{
	int n;
	cin >> n;
	vector<int> inp(n,1);
	vector<pair<int, int>> sVec(n);
	for (size_t i = 0; i < n; i++)
	{
		int a;
		cin >> a;
		sVec[i] = { a,i };
	}
	sort(sVec.begin(), sVec.end());
	fenwick_tree fw = fenwick_tree(inp);
	int ans = 0;
	for (size_t i = 0; i < n; i++)
	{
		fw.update(sVec[i].second, 0);
		int beg = max(0ll, sVec[i].second - sVec[i].first);
		int end = min(n-1, sVec[i].second + sVec[i].first);
		ans += fw.sumRange(beg, end);
	}
	cout << ans << "\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1812 KiB
2Elfogadva76ms13776 KiB
subtask211/11
3Elfogadva3ms2304 KiB
4Elfogadva4ms3136 KiB
5Elfogadva4ms3444 KiB
6Elfogadva4ms3396 KiB
7Elfogadva4ms3620 KiB
8Elfogadva4ms3972 KiB
9Elfogadva4ms3924 KiB
10Elfogadva4ms3936 KiB
subtask312/12
11Elfogadva111ms23284 KiB
12Elfogadva101ms23312 KiB
13Elfogadva111ms23568 KiB
14Elfogadva75ms23592 KiB
15Elfogadva108ms23452 KiB
16Elfogadva76ms23740 KiB
17Elfogadva104ms23664 KiB
subtask431/31
18Elfogadva97ms23692 KiB
19Elfogadva108ms23664 KiB
20Elfogadva70ms23952 KiB
21Elfogadva103ms23860 KiB
22Elfogadva127ms24156 KiB
23Elfogadva126ms24140 KiB
24Elfogadva134ms24076 KiB
25Elfogadva126ms24248 KiB
26Elfogadva131ms24184 KiB
subtask546/46
27Elfogadva111ms24204 KiB
28Elfogadva119ms24488 KiB
29Elfogadva120ms24520 KiB
30Elfogadva79ms24520 KiB
31Elfogadva126ms24480 KiB
32Elfogadva72ms24448 KiB
33Elfogadva128ms24492 KiB
34Elfogadva128ms24488 KiB
35Elfogadva128ms24432 KiB
36Elfogadva71ms24416 KiB
37Elfogadva129ms24408 KiB
38Elfogadva123ms24408 KiB
39Elfogadva123ms24412 KiB
40Elfogadva128ms24548 KiB
41Elfogadva126ms24736 KiB