# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1102896 | alexander707070 | Gondola (IOI14_gondola) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#include "gondola.h"
#define MAXN 500007
using namespace std;
int n,pos;
int s[MAXN],last,maxs,where[MAXN];
bool li[MAXN];
int valid(int N, int inputSeq[]){
n=N;
int mins=1;
for(int i=1;i<=n;i++){
s[i]=inputSeq[i-1];
s[i+n]=s[i];
if(s[i]<s[mins]){
mins=i;
}
}
for(int i=mins;i<mins+n;i++){
if(s[i]<=n and s[i]!=s[mins]+i-mins)return 0;
if(s[i]>n){
if(li[s[i]])return 0;
li[s[i]]=true;
}
}
return 1;
}
int replacement(int N, int gondolaSeq[], int replacementSeq[]){
n=N;
maxs=1;
for(int i=1;i<=n;i++){
s[i]=gondolaSeq[i-1];
if(s[i]>s[maxs])maxs=i;
if(s[i]<=n)pos=i;
where[s[i]]=i;
}
if(pos==0){
for(int i=1;i<=n;i++)val[i]=i;
}else{
for(int i=pos;i<=n;i++)val[i]=s[pos]+i-pos;
for(int i=1;i<pos;i++)val[i]=val[n]+i;
for(int i=1;i<=n;i++){
if(val[i]>n)val[i]-=n;
}
}
for(int i=n+1;i<=s[maxs];i++){
if(where[i]==0){
replacementSeq[i-n-1]=val[maxs];
val[maxs]=i;
}else{
replacementSeq[i-n-1]=val[where[i]];
val[where[i]]=i;
}
}
return s[maxs]-n;
}
//----------------------
int countReplacement(int n, int inputSeq[])
{
return -3;
}