10073 2024. 03. 26 12:17:29 CWM Barátok cpp17 Hibás válasz 23/100 120ms 43272 KiB
#include <iostream>
#include <optional>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

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(0, 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 Hibás válasz 70ms 8716 KiB
subtask2 11/11
3 Elfogadva 3ms 2884 KiB
4 Elfogadva 4ms 3472 KiB
5 Elfogadva 4ms 3724 KiB
6 Elfogadva 4ms 4052 KiB
7 Elfogadva 4ms 4296 KiB
8 Elfogadva 4ms 4560 KiB
9 Elfogadva 4ms 4552 KiB
10 Elfogadva 4ms 4584 KiB
subtask3 12/12
11 Elfogadva 101ms 14956 KiB
12 Elfogadva 96ms 15576 KiB
13 Elfogadva 101ms 16452 KiB
14 Elfogadva 68ms 16892 KiB
15 Elfogadva 101ms 17812 KiB
16 Elfogadva 68ms 18216 KiB
17 Elfogadva 97ms 18996 KiB
subtask4 0/31
18 Elfogadva 92ms 19520 KiB
19 Elfogadva 101ms 20376 KiB
20 Elfogadva 65ms 20772 KiB
21 Elfogadva 94ms 21664 KiB
22 Hibás válasz 118ms 22828 KiB
23 Hibás válasz 115ms 23856 KiB
24 Hibás válasz 120ms 25264 KiB
25 Elfogadva 115ms 26664 KiB
26 Hibás válasz 118ms 28152 KiB
subtask5 0/46
27 Elfogadva 101ms 28852 KiB
28 Elfogadva 111ms 29708 KiB
29 Elfogadva 114ms 30868 KiB
30 Elfogadva 72ms 31368 KiB
31 Hibás válasz 116ms 32584 KiB
32 Elfogadva 65ms 33020 KiB
33 Hibás válasz 116ms 34360 KiB
34 Hibás válasz 116ms 35592 KiB
35 Hibás válasz 115ms 36780 KiB
36 Elfogadva 64ms 37272 KiB
37 Hibás válasz 116ms 38544 KiB
38 Elfogadva 114ms 39732 KiB
39 Hibás válasz 115ms 40740 KiB
40 Hibás válasz 119ms 42184 KiB
41 Hibás válasz 114ms 43272 KiB