Submission #1253423

#TimeUsernameProblemLanguageResultExecution timeMemory
1253423fve5Triple Peaks (IOI25_triples)C++20
5.29 / 100
1000 ms2162688 KiB
#include <bits/stdc++.h> #include "triples.h" using namespace std; typedef long long i64; constexpr int MAXN = 50000; i64 count_triples(vector<int> H) { auto check = [&](int i, int j, int k) { array<int, 3> h = {H[i], H[j], H[k]}; array<int, 3> d = {abs(i - j), abs(i - k), abs(j - k)}; sort(h.begin(), h.end()); sort(d.begin(), d.end()); return h == d; }; int N = H.size(); i64 ans = 0; for (auto _: {0, 1}) { for (int i = 0; i < N; i++) { int j = i + H[i]; if (j >= N) continue; int k1 = j - H[j]; if (k1 >= 0 && k1 > i) { ans += check(i, j, k1); } int k2 = i + H[j]; if (k2 < N && k2 < j && k2 != k1) { ans += check(i, j, k2); } } reverse(H.begin(), H.end()); } vector<vector<int>> upds(N); for (int i = 0; i < N; i++) { upds[i].push_back(-H[i]); upds[max(i - H[i] + 1, 0)].push_back(H[i]); } bitset<MAXN> good_lengths; vector<int> len_good_count(N); vector<bitset<MAXN>> by_diff(2 * N); for (int i = 0; i < N; i++) by_diff[i - H[i] + N].set(i); for (int i = 0; i < N; i++) { for (auto x: upds[i]) { if (x > 0) len_good_count[x]++; else len_good_count[-x]--; good_lengths[abs(x)] = len_good_count[abs(x)] > 0; } if (i + H[i] >= N) continue; ans += (good_lengths & (by_diff[i + H[i] + N] >> i)).count(); } return ans; } vector<int> construct_range(int M, int K) { vector<int> A(M); iota(A.begin(), A.end(), 0); A[0] = 1; return A; }
#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...