# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
261911 | baluteshih | 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 "lib1897.h"
#include <bits/stdc++.h>
#define jizz ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define pb push_back
#define MP make_pair
#define F first
#define S second
#define MEM(i,j) memset(i,j,sizeof i)
#define ALL(v) v.begin(),v.end()
#define ET cout << "\n"
#define DB(a,s,e) {for(int i=s;i<e;++i) cout << a[i] << " ";ET;}
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const ll MOD=1e9+9;
int valid(int n, int inputSeq[])
{
int p=min_element(inputSeq,inputSeq+n)-inputSeq;
vector<int> v(inputSeq,inputSeq+n);
sort(ALL(v));
for(int i=0;i+1<n;++i)
if(v[i]==v[i+1]) return 0;
if(inputSeq[p]>n) return 1;
for(int i=p;i<p+n;++i)
if(inputSeq[i%n]<=n&&inputSeq[i%n]!=inputSeq[p]+i-p)
return 0;
return 1;
}
//----------------------
int ans[300005];
int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
vector<int> org(n);
int p=min_element(gondolaSeq,gondolaSeq+n)-gondolaSeq;
if(gondolaSeq[p]>n)
for(int i=0;i<n;++i)
org[i]=i+1;
else
for(int i=p;i<p+n;++i)
org[i%n]=(gondolaSeq[p]+i-p-1)%n+1;
vector<pii> v;
for(int i=0;i<n;++i)
if(gondolaSeq[i]>n)
v.pb(MP(gondolaSeq[i],i));
sort(ALL(v));
int nw=n+1,tp=0;
for(pii i:v)
{
ans[tp++]=org[i.S];
while(nw<=i.F)
ans[tp++]=nw++;
--tp;
}
for(int i=0;i<tp;++i)
replacementSeq[i]=ans[i];
return tp;
}
//----------------------
ll pw(ll a,ll n)
{
ll re=1;
for(;n;n>>=1,a=a*a%MOD)
if(n&1) re=re*a%MOD;
return re;
}
int countReplacement(int n, int inputSeq[])
{
if(!valid(n,inputSeq)) return 0;
ll ans=1;
if(*min_element(inputSeq,inputSeq+n)>n) ans=n;
vector<int> v;
for(int i=0;i<n;++i)
if(inputSeq[i]>n)
v.pb(inputSeq[i]);
sort(ALL(v),greater<int>());
for(int ls=n+1;!v.empty();ls=v.back()+1,v.pop_back())
ans*=pw(v.size(),v.back()-ls),ans%=MOD;
return ans;
}