Skip to content

Instantly share code, notes, and snippets.

@akhilesh-kumar-verma
Last active February 6, 2024 16:13
Show Gist options
  • Save akhilesh-kumar-verma/91f705df0bebf76b3e3ca0233454d5f0 to your computer and use it in GitHub Desktop.
Save akhilesh-kumar-verma/91f705df0bebf76b3e3ca0233454d5f0 to your computer and use it in GitHub Desktop.
#include <iostream>
using namespace std;
int* max_element(int *begin, int *end) {
int *answer=begin;
for (int *iter=begin;iter!=end; ++iter) { if (*iter>*answer) { answer=iter; } }
return answer; }
int main() {
size_t N; cin >> N; int nums[N]; for (size_t i=0; i < N; ++i) { cin>>nums[i]; }
int *min=max_element(nums,nums+N); auto left=min, right=min; int soln[N];
for (size_t size=1; size <= N; ++size) {
int gap=size-(right-left+1);
if ((left-gap<nums || *(left-gap)>=*min) && (right+gap>=nums+N || *(right+gap)>=*min)) { soln[size-1]=(*min); continue; }
if ((right+gap>=nums+N || *(right+gap)>=*min) && left-gap>=nums) { min=left=left-gap; }
if ((left-gap<nums || *(left-gap)>=*min) && right+gap<nums+N) { min=right=right+gap; }
if ((left-gap<nums || *(left-gap)>=*min) || (right+gap>=nums+N || *(right+gap)>=*min)) { soln[size-1]=(*min); continue; }
if ((left-gap>=nums) && (right+gap<nums+N)) { if (*(left-gap)>*(right+gap)) { left=min=left-gap; } else { right=min=right+gap; } }
soln[size-1]=(*min); }
for (int num: soln) cout << num << " "; cout << endl;
return 0; }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment