167782025-05-13 07:32:35BucsMateBarátokcpp17Elfogadva 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms508 KiB
2Elfogadva111ms3892 KiB
subtask211/11
3Elfogadva1ms508 KiB
4Elfogadva4ms316 KiB
5Elfogadva4ms316 KiB
6Elfogadva4ms316 KiB
7Elfogadva4ms344 KiB
8Elfogadva4ms316 KiB
9Elfogadva3ms316 KiB
10Elfogadva4ms544 KiB
subtask312/12
11Elfogadva185ms5848 KiB
12Elfogadva167ms5684 KiB
13Elfogadva181ms5792 KiB
14Elfogadva120ms5360 KiB
15Elfogadva174ms5680 KiB
16Elfogadva118ms5428 KiB
17Elfogadva159ms5736 KiB
subtask431/31
18Elfogadva152ms5428 KiB
19Elfogadva172ms5876 KiB
20Elfogadva116ms5428 KiB
21Elfogadva159ms5868 KiB
22Elfogadva186ms6220 KiB
23Elfogadva195ms6196 KiB
24Elfogadva172ms6452 KiB
25Elfogadva203ms6196 KiB
26Elfogadva156ms6452 KiB
subtask546/46
27Elfogadva188ms5684 KiB
28Elfogadva218ms6080 KiB
29Elfogadva225ms5940 KiB
30Elfogadva128ms5476 KiB
31Elfogadva215ms6196 KiB
32Elfogadva115ms5428 KiB
33Elfogadva156ms6248 KiB
34Elfogadva153ms6252 KiB
35Elfogadva192ms6196 KiB
36Elfogadva115ms5352 KiB
37Elfogadva184ms6368 KiB
38Elfogadva203ms5940 KiB
39Elfogadva202ms6196 KiB
40Elfogadva168ms6452 KiB
41Elfogadva209ms6188 KiB