167782025-05-13 07:32:35BucsMateBarátokcpp17Accepted 100/100225ms6452 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> segmTree;

void construct(int node, int left, int right)
{
    if(left == right){
        segmTree[node] = 1;
        return;
    }
    int mid = (left + right)/2;
    construct(2*node, left, mid);
    construct(2*node+1, mid+1, right);

    segmTree[node] = segmTree[2*node] + segmTree[2*node+1];
}

void update(int node, int left, int right, int poz)
{
    if(left == right){
        segmTree[node] = 0;
        return;
    }
    int mid = (left + right)/2;

    if(poz <= mid){
        update(2*node, left, mid, poz);
    }
    else{
        update(2*node+1, mid+1, right, poz);
    }
    segmTree[node] = segmTree[2*node] + segmTree[2*node+1];
}

int query(int node, int left, int right, int a, int b)
{
    if(left >= a && right <= b){
        return segmTree[node];
    }
    int mid = (left + right)/2;

    int sum = 0;
    if(a <= mid){
        sum += query(2*node, left, mid, a, b);
    }
    if(b > mid){
        sum += query(2*node+1, mid+1, right, a, b);
    }
    return sum;
}

int main()
{
    int N;
    cin >> N;
    vector<pair<int, int>> szamok(N+1);
    segmTree.assign(4*N+4, 0);
    for(int i = 1; i <= N; i++){
        int a;
        cin >> a;
        szamok[i] = {a, i};
    }
    sort(szamok.begin()+1, szamok.end());

    construct(1, 1, N);

    long long ans = 0;
    for(int i = 1; i <= N; i++){
        int qleft = max(1, szamok[i].second - szamok[i].first);
        int qright = min(N, szamok[i].second + szamok[i].first);
        ans += query(1, 1, N, qleft, qright) - 1;
        update(1, 1, N, szamok[i].second);
    }

    cout << ans << endl;

    return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms508 KiB
2Accepted111ms3892 KiB
subtask211/11
3Accepted1ms508 KiB
4Accepted4ms316 KiB
5Accepted4ms316 KiB
6Accepted4ms316 KiB
7Accepted4ms344 KiB
8Accepted4ms316 KiB
9Accepted3ms316 KiB
10Accepted4ms544 KiB
subtask312/12
11Accepted185ms5848 KiB
12Accepted167ms5684 KiB
13Accepted181ms5792 KiB
14Accepted120ms5360 KiB
15Accepted174ms5680 KiB
16Accepted118ms5428 KiB
17Accepted159ms5736 KiB
subtask431/31
18Accepted152ms5428 KiB
19Accepted172ms5876 KiB
20Accepted116ms5428 KiB
21Accepted159ms5868 KiB
22Accepted186ms6220 KiB
23Accepted195ms6196 KiB
24Accepted172ms6452 KiB
25Accepted203ms6196 KiB
26Accepted156ms6452 KiB
subtask546/46
27Accepted188ms5684 KiB
28Accepted218ms6080 KiB
29Accepted225ms5940 KiB
30Accepted128ms5476 KiB
31Accepted215ms6196 KiB
32Accepted115ms5428 KiB
33Accepted156ms6248 KiB
34Accepted153ms6252 KiB
35Accepted192ms6196 KiB
36Accepted115ms5352 KiB
37Accepted184ms6368 KiB
38Accepted203ms5940 KiB
39Accepted202ms6196 KiB
40Accepted168ms6452 KiB
41Accepted209ms6188 KiB