10074 2024. 03. 26 12:23:05 CWM Barátok cpp17 Elfogadva 100/100 134ms 24736 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1812 KiB
2 Elfogadva 76ms 13776 KiB
subtask2 11/11
3 Elfogadva 3ms 2304 KiB
4 Elfogadva 4ms 3136 KiB
5 Elfogadva 4ms 3444 KiB
6 Elfogadva 4ms 3396 KiB
7 Elfogadva 4ms 3620 KiB
8 Elfogadva 4ms 3972 KiB
9 Elfogadva 4ms 3924 KiB
10 Elfogadva 4ms 3936 KiB
subtask3 12/12
11 Elfogadva 111ms 23284 KiB
12 Elfogadva 101ms 23312 KiB
13 Elfogadva 111ms 23568 KiB
14 Elfogadva 75ms 23592 KiB
15 Elfogadva 108ms 23452 KiB
16 Elfogadva 76ms 23740 KiB
17 Elfogadva 104ms 23664 KiB
subtask4 31/31
18 Elfogadva 97ms 23692 KiB
19 Elfogadva 108ms 23664 KiB
20 Elfogadva 70ms 23952 KiB
21 Elfogadva 103ms 23860 KiB
22 Elfogadva 127ms 24156 KiB
23 Elfogadva 126ms 24140 KiB
24 Elfogadva 134ms 24076 KiB
25 Elfogadva 126ms 24248 KiB
26 Elfogadva 131ms 24184 KiB
subtask5 46/46
27 Elfogadva 111ms 24204 KiB
28 Elfogadva 119ms 24488 KiB
29 Elfogadva 120ms 24520 KiB
30 Elfogadva 79ms 24520 KiB
31 Elfogadva 126ms 24480 KiB
32 Elfogadva 72ms 24448 KiB
33 Elfogadva 128ms 24492 KiB
34 Elfogadva 128ms 24488 KiB
35 Elfogadva 128ms 24432 KiB
36 Elfogadva 71ms 24416 KiB
37 Elfogadva 129ms 24408 KiB
38 Elfogadva 123ms 24408 KiB
39 Elfogadva 123ms 24412 KiB
40 Elfogadva 128ms 24548 KiB
41 Elfogadva 126ms 24736 KiB