제출 #1251462

#제출 시각아이디문제언어결과실행 시간메모리
1251462flashmt3개의 봉우리 (IOI25_triples)C++20
51 / 100
2095 ms43076 KiB
#include "triples.h" #include <bits/stdc++.h> #ifdef LOCAL #include "Debug.h" #else #define debug(...) 42 #endif using namespace std; long long calc(vector<int> h) { int n = size(h); vector<int> l(n), r(n); vector<vector<int>> lAt(n * 3), rAt(n * 3); for (int i = 0; i < n; i++) { l[i] = i - h[i]; lAt[l[i] + n].push_back(h[i]); r[i] = i + h[i]; rAt[r[i] + n].push_back(h[i]); } for (int i = 0; i < n * 3; i++) { sort(begin(lAt[i]), end(lAt[i])); sort(begin(rAt[i]), end(rAt[i])); } long long res = 0; for (int i = 0; i < n; i++) { int j = r[i]; if (j < n) { // 2.3..5 res += r[j] < n && h[r[j]] == h[i] + h[j]; // 2.5..3 if (h[j] > h[i]) { int k = j + h[j] - h[i]; if (k < n && l[k] == j) res++; } // 5.3..2 if (h[j] < h[i]) { int k = i + h[j]; if (r[k] == j && h[k] != h[j]) // exclude 211 res++; } } // k.2..5.3..j int ll = l[i] + n, rr = r[i] + n, szL = size(lAt[ll]), szR = size(rAt[rr]); for (int u = 0, v = szR - 1; u < szL && v >= 0;) if (lAt[ll][u] + rAt[rr][v] == h[i]) { res += lAt[ll][u] != rAt[rr][v]; u++; } else if (lAt[ll][u] + rAt[rr][v] < h[i]) u++; else v--; } for (int i = 0; i < n; i++) { int j = l[i]; if (j < 0) continue; // 5.2..3 if (l[j] >= 0 && h[l[j]] == h[i] + h[j]) res++; // 3.2..5 int k = i + h[j]; if (r[j] != i && k < n && h[k] == h[i] + h[j]) // exclude 112 res++; } return res; } long long count_triples(vector<int> h) { return calc(h); } 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...