Submission #1253299

#TimeUsernameProblemLanguageResultExecution timeMemory
1253299chr34Triple Peaks (IOI25_triples)C++20
18 / 100
2093 ms20340 KiB
#include <bits/stdc++.h> using namespace std; //#define int long long #define endl "\n" #define dbg(x) cout << #x << " = " << (x) << endl; const long long INF = 1e18; const int MAXN = 1e6 + 10; const int MOD = 1e9 + 7; bool match(vector<int> a, vector<int> b){ sort(a.begin(), a.end()); sort(b.begin(), b.end()); for(int i = 0; i < 3; ++i) if(a[i] != b[i]) return false; return true; } long long count_triples(vector<int> h) { int n = h.size(); long long ans = 0; // Preprocess: Map from height to list of indices unordered_map<int, vector<int>> idx_map; for (int i = 0; i < n; ++i) idx_map[h[i]].push_back(i); for(int i = 0; i < n; ++i){ for(int j = i + 1; j < n; ++j){ int di = j - i; if(di != h[i] && di != h[j]){ // di must be h[k], k > j if (idx_map.count(di)) { const vector<int>& idxs = idx_map[di]; auto it = upper_bound(idxs.begin(), idxs.end(), j); for (; it != idxs.end(); ++it) { int k = *it; vector<int> htriple = {h[i], h[j], h[k]}; vector<int> dtriple = {j - i, k - i, k - j}; if (match(htriple, dtriple)) ans++; } } } else if(di == h[i]){ int k1 = j + h[j]; if(k1 < n && match({h[i], h[j], h[k1]}, {di, k1 - i, k1 - j})) ans++; int k2 = i + h[j]; if(k2 < n && k2 > j && match({h[i], h[j], h[k2]}, {di, k2 - i, k2 - j})) ans++; } else if(di == h[j]){ int k1 = i + h[i]; if(k1 < n && k1 > j && match({h[i], h[j], h[k1]}, {di, k1 - i, k1 - j})) ans++; int k2 = j + h[i]; if(k2 < n && match({h[i], h[j], h[k2]}, {di, k2 - i, k2 - j})) ans++; } } } return ans; } vector<int> construct_range(int m, int k){ return {}; } /*int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); //freopen("input.in", "r", stdin); //freopen("input.out", "w", stdout); cout<<count_triples({4, 1, 4, 3, 2, 6, 1}); return 0; }*/
#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...