Submission #1252877

#TimeUsernameProblemLanguageResultExecution timeMemory
1252877ollelapTriple Peaks (IOI25_triples)C++20
17 / 100
188 ms43044 KiB
#pragma GCC optimize ("O3") #include "triples.h" using namespace std; #include <bits/stdc++.h> typedef long long ll; #define rep(i,a,b) for(ll i = a; i < b; i++) long long count_triples(std::vector<int> arr) { int n = arr.size(); set<tuple<int,int,int>> ans; auto check = [&](int i, int j, int k) { int ind[] = {i, j, k}; int a[] = {min(j-i, k-j), max(j-i, k-j), abs(k-i)}; int b[] = {arr[i], arr[j], arr[k]}; sort(b, b+3); if (a[0] == b[0] && a[1] == b[1] && a[2] == b[2]) { ans.insert({ind[0], ind[1], ind[2]}); } }; rep(i,0,n) { for (auto j : {i + arr[i], i - arr[i]}) { if (j < 0 || j > n-1) continue; for (auto k : {i + arr[j], i - arr[j], j + arr[j], j - arr[j]}) { if (k < 0 || k > n-1) continue; int ind[] = {i, j, k}; sort(ind, ind+3); check(ind[0], ind[1], ind[2]); } } } vector<vector<int>> forw(2*n), back(2*n); vector<int> before(n,0), after(n,0); rep(i,0,n) { int x = arr[i]-i+n; before[i] = forw[x].size(); forw[x].push_back(i); } for (int i = n-1; i>= 0; i--) { int x = arr[i]+i; after[i] = back[x].size(); back[x].push_back(i); } rep(b,0,n) { if (before[b] < after[b]) { rep(i,0,before[b]) { int a = forw[arr[b]-b+n][i]; int c = a + arr[b]; if (c < n) check(a, b, c); } } else { rep(i,0,after[b]) { int c = back[arr[b]+b][i]; int a = c - arr[b]; if (a > 0) check(a, b, c); } } } return ans.size(); } std::vector<int> construct_range(int M, int K) { vector<int> res(M); return res; }

Compilation message (stderr)

triples.cpp: In function 'long long int count_triples(std::vector<int>)':
triples.cpp:31:30: warning: narrowing conversion of 'i' from 'll' {aka 'long long int'} to 'int' [-Wnarrowing]
   31 |                 int ind[] = {i, j, k};
      |                              ^
triples.cpp:31:33: warning: narrowing conversion of 'j' from 'long long int' to 'int' [-Wnarrowing]
   31 |                 int ind[] = {i, j, k};
      |                                 ^
triples.cpp:31:36: warning: narrowing conversion of 'k' from 'long long int' to 'int' [-Wnarrowing]
   31 |                 int ind[] = {i, j, k};
      |                                    ^
#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...