Submission #1251373

#TimeUsernameProblemLanguageResultExecution timeMemory
1251373tranvinhhuy2010Triple Peaks (IOI25_triples)C++20
0 / 100
83 ms26296 KiB
//#include "triples.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int nmax = 2e5 + 5;
int n;
unordered_map <int, set <int>> mk;

ll count_triples(vector <int> H) {
    n = H.size();
    ll cnt = 0;
    for (int j=0; j<n; j++) {
        // Hj = j - i
        int i = j - H[j];
        if (i>=0) {
            int k1 = i + H[i], k2 = j + H[i];
            if (k1<n && k1>j && H[k1]==k1-j) cnt++;
            if (k2<n && k2>j && H[k2]==k2-i) cnt++;
        }

        // Hj = k - j
        int k = j + H[j];
        if (k<n) {
            int i1 = j - H[k], i2 = k - H[k];
            if (i1>=0 && i1<j && H[i1]==k-i1) cnt++;
            if (i2>=0 && i2<j && H[i2]==j-i2) cnt++;
        }

        mk[j - H[j]].insert(j);
    }

    //Hj = k-i && Hi = j-i
    for (int i=0; i<n; i++) {
        int j = i + H[i];
        if (j<n) {
            int k = i + H[j];
            if (k>j && k<n && H[k]==k-j) cnt++;
        }
    }

    // Hj = k-i && Hi = k-i
    for (int i=0; i<n; i++) {
        mk[i - H[i]].erase(i);

        for (int k : mk[i + H[i]]) {
            int j = i + H[k];
            if (j<k && H[j]==k-i) cnt++;
        }
    }

    return cnt;
}

vector<int> construct_range(int M, int K) {
    return {1, 1, 1};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...