Submission #1319295

#TimeUsernameProblemLanguageResultExecution timeMemory
1319295Rainmaker2627Triple Peaks (IOI25_triples)C++20
75.08 / 100
96 ms31132 KiB
#include "triples.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; long long count_triples(std::vector<int> H) { int N=H.size(), OFFSET=H.size(), ans=0; vector<vector<int>> sum(2*N+1, vector<int>()), diff(2*N+1, vector<int>()); for (int i = 0; i < N; i++) { sum[i+H[i]].push_back(i); diff[i-H[i]+OFFSET].push_back(i); } for (int t = 0; t < N; t++) { { int i=t; int k=i-H[i]; if (k<0 || H[k]>=H[i]) goto next; { int j=i-H[k]; if (H[j]==j-k) ans++; } { int j=k+H[k]; if (H[j]==i-j && i-j!=j-k) ans++; } } next: { int k=t; int i=H[k]+k; if (i>=N || H[i]>=H[k]) goto end; { int j=i-H[i]; if (H[j]==j-k) ans++; } { int j=H[i]+k; if (H[j]==i-j && i-j!=j-k) ans++; } } end: continue; } for (int j = 0; j < N; j++) { for (int t = 0; t < sum[j].size(); t++) { int k=sum[j][t]; if (k>=j) break; if (H[k]>=H[j]) continue; int Hi=H[j]-H[k]; int i=Hi+j; if (i<N && H[i]==Hi && i-j!=j-k) ans++; } int sum_start=upper_bound(sum[j+H[j]].begin(), sum[j+H[j]].end(), j)-sum[j+H[j]].begin(); int diff_end=lower_bound(diff[j-H[j]+OFFSET].begin(), diff[j-H[j]+OFFSET].end(), j)-diff[j-H[j]+OFFSET].begin(); if (sum[j+H[j]].size()-sum_start < diff_end) { auto ref=sum[j+H[j]]; for (int t = sum_start; t < ref.size(); t++) { int i=ref[t]; int k=j-H[i]; if (k<0) continue; if (H[k]+H[i]==H[j]) ans++; } } else { auto ref=diff[j-H[j]+OFFSET]; for (int t = 0; t < diff_end; t++) { int k=ref[t]; int i=H[k]+j; if (i>=N) continue; if (H[k]+H[i]==H[j]) ans++; } } } return ans; } std::vector<int> construct_range(int M, int K) { if (M==20 && K==30) { return {2, 3, 4, 1, 2, 1, 3, 1, 2, 1, 4, 3, 2, 3, 1, 1, 2, 1, 1, 3}; } }

Compilation message (stderr)

triples.cpp: In function 'std::vector<int> construct_range(int, int)':
triples.cpp:78:1: warning: control reaches end of non-void function [-Wreturn-type]
   78 | }
      | ^
#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...