100732024-03-26 12:17:29CWMBarátokcpp17Hibás válasz 23/100120ms43272 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1812 KiB
2Hibás válasz70ms8716 KiB
subtask211/11
3Elfogadva3ms2884 KiB
4Elfogadva4ms3472 KiB
5Elfogadva4ms3724 KiB
6Elfogadva4ms4052 KiB
7Elfogadva4ms4296 KiB
8Elfogadva4ms4560 KiB
9Elfogadva4ms4552 KiB
10Elfogadva4ms4584 KiB
subtask312/12
11Elfogadva101ms14956 KiB
12Elfogadva96ms15576 KiB
13Elfogadva101ms16452 KiB
14Elfogadva68ms16892 KiB
15Elfogadva101ms17812 KiB
16Elfogadva68ms18216 KiB
17Elfogadva97ms18996 KiB
subtask40/31
18Elfogadva92ms19520 KiB
19Elfogadva101ms20376 KiB
20Elfogadva65ms20772 KiB
21Elfogadva94ms21664 KiB
22Hibás válasz118ms22828 KiB
23Hibás válasz115ms23856 KiB
24Hibás válasz120ms25264 KiB
25Elfogadva115ms26664 KiB
26Hibás válasz118ms28152 KiB
subtask50/46
27Elfogadva101ms28852 KiB
28Elfogadva111ms29708 KiB
29Elfogadva114ms30868 KiB
30Elfogadva72ms31368 KiB
31Hibás válasz116ms32584 KiB
32Elfogadva65ms33020 KiB
33Hibás válasz116ms34360 KiB
34Hibás válasz116ms35592 KiB
35Hibás válasz115ms36780 KiB
36Elfogadva64ms37272 KiB
37Hibás válasz116ms38544 KiB
38Elfogadva114ms39732 KiB
39Hibás válasz115ms40740 KiB
40Hibás válasz119ms42184 KiB
41Hibás válasz114ms43272 KiB