#include "gondola.h"
#include <bits/stdc++.h>
#define bupol __builtin_popcount
#define ll long long
#define ld long double
#define fi first
#define se second
#define pb push_back
#define lf (id<<1)
#define rg ((id<<1)|1)
#define md ((l+r)>>1)
using namespace std;
const int MAXN = 3e5+10;
const int MAXK = 205;
const int LOG = 20;
const int MOD = 1e9+7;
const int SQRT = 520;
const int INF = 1e9+10;
typedef pair<int,int> pii;
typedef pair<int, pii> ipii;
ll sum(ll a, ll b){
return (a+b)%MOD;
}
ll mul(ll a, ll b){
a %= MOD; b %= MOD;
return (a*b)%MOD;
}
int n;
int a[MAXN], sta[MAXN], idx = -1;
vector <int> vec, ans; vector <pii> sw;
bool use[MAXN];
int mn = INF, mx = -1;
ll ANS;
int valid(int N, int inputSeq[])
{
n = N;
for(int i=1; i<=n; i++) a[i] = inputSeq[i-1];
for(int i=1; i<=n; i++){
if(mn > a[i]){
mn = a[i]; idx = i;
}
}
assert(idx != -1);
vec.pb(-1);
for(int i=idx; i<=n; i++) vec.pb(a[i]);
for(int i=1; i<=idx-1; i++) vec.pb(a[i]);
for(int i=1; i<=n; i++){
if(use[vec[i]]) return 0; // ngedobel
use[vec[i]] = 1;
if(vec[i] >= n+1) continue; // gpp gk dicek
// vec[i] <= n
int num = vec[1]+i-1; // harusnya angkanya brp
if(num >= n+1) num -= n;
if(mx >= vec[i] || vec[i] != num) return 0; // loh kok turun
mx = max(mx, vec[i]);
}
return 1;
}
//----------------------
int replacement(int N, int gondolaSeq[], int replacementSeq[])
{
n = N;
for(int i=1; i<=n; i++) a[i] = gondolaSeq[i-1];
for(int i=1; i<=n; i++){
if(mn > a[i]){
mn = a[i]; idx = i;
}
}
assert(idx != -1);
vec.pb(-1);
for(int i=idx; i<=n; i++) vec.pb(a[i]);
for(int i=1; i<=idx-1; i++) vec.pb(a[i]);
if(mn <= n){
for(int i=1; i<=n; i++){
if(use[vec[i]]) return 0; // ngedobel
use[vec[i]] = 1;
int num = vec[1]+i-1; // harusnya angkanya brp
if(num >= n+1) num -= n;
sta[i] = num; // startnya brp
if(vec[i] <= n) continue; // gpp gk dicek
if(vec[i] >= n+1){
sw.pb({vec[i], i});
}
}
} else {
for(int i=1; i<=n; i++){
sta[i] = i;
sw.pb({vec[i], i});
}
}
sort(sw.begin(), sw.end());
//for(auto in : sw) cout << vec[in.fi] << ' ' << in.se << " p\n";
int cnt = n+1;
for(auto in : sw){
int idx = in.se, val = in.fi; // num -> val
ans.pb(sta[idx]); sta[idx] = cnt++;
for(int i=sta[idx]; true; i++){
if(sta[idx]==val) break;
ans.pb(sta[idx]);
sta[idx] = cnt++;
}
}
for(int i=0; i<ans.size(); i++) replacementSeq[i] = ans[i];
return (int)(ans.size());
}
//----------------------
int countReplacement(int N, int inputSeq[])
{
if(!valid(N, inputSeq)) return 0;
//cout << " masuk\n";
n = N;
for(int i=1; i<=n; i++) a[i] = inputSeq[i-1];
for(int i=1; i<=n; i++){
if(mn > a[i]){
mn = a[i]; idx = i;
}
}
assert(idx != -1);
vec.pb(-1);
for(int i=idx; i<=n; i++) vec.pb(a[i]);
for(int i=1; i<=idx-1; i++) vec.pb(a[i]);
ANS = 1ll;
if(mn <= n){
for(int i=1; i<=n; i++){
int num = vec[1]+i-1; // harusnya angkanya brp
if(num >= n+1) num -= n;
sta[i] = num; // startnya brp
if(vec[i] <= n) continue; // gpp gk dicek
if(vec[i] >= n+1){
sw.pb({vec[i], i});
}
}
} else {
for(int i=1; i<=n; i++){
sta[i] = i;
sw.pb({vec[i], i});
}
ANS = n;
}
sort(sw.begin(), sw.end());
//for(auto in : sw) cout << in.fi << ' ' << in.se << " p\n";
int cnt = n+1, num = (int)(sw.size());
for(auto in : sw){
int idx = in.se, val = in.fi; // num -> val
sta[idx] = cnt++;
for(int i=sta[idx]; true; i++){
if(sta[idx]==val) break;
sta[idx] = cnt++;
ANS = mul(ANS, num);
}
num--;
}
return (int)(ANS);
}
Compilation message
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:118:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
118 | for(int i=0; i<ans.size(); i++) replacementSeq[i] = ans[i];
| ~^~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2392 KB |
Output is correct |
2 |
Correct |
1 ms |
2392 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
4 |
Correct |
1 ms |
2396 KB |
Output is correct |
5 |
Correct |
1 ms |
2396 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2396 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2648 KB |
Output is correct |
4 |
Correct |
1 ms |
2396 KB |
Output is correct |
5 |
Correct |
1 ms |
2396 KB |
Output is correct |
6 |
Correct |
4 ms |
3164 KB |
Output is correct |
7 |
Correct |
7 ms |
3884 KB |
Output is correct |
8 |
Correct |
7 ms |
3800 KB |
Output is correct |
9 |
Correct |
3 ms |
2824 KB |
Output is correct |
10 |
Correct |
7 ms |
3800 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2396 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2492 KB |
Output is correct |
4 |
Correct |
1 ms |
2396 KB |
Output is correct |
5 |
Correct |
1 ms |
2396 KB |
Output is correct |
6 |
Correct |
4 ms |
3164 KB |
Output is correct |
7 |
Correct |
8 ms |
3800 KB |
Output is correct |
8 |
Correct |
6 ms |
3916 KB |
Output is correct |
9 |
Correct |
3 ms |
2908 KB |
Output is correct |
10 |
Correct |
8 ms |
3800 KB |
Output is correct |
11 |
Correct |
1 ms |
2396 KB |
Output is correct |
12 |
Correct |
1 ms |
2396 KB |
Output is correct |
13 |
Correct |
4 ms |
3204 KB |
Output is correct |
14 |
Correct |
1 ms |
2648 KB |
Output is correct |
15 |
Correct |
7 ms |
3904 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2392 KB |
Output is correct |
2 |
Correct |
1 ms |
2492 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
4 |
Correct |
1 ms |
2396 KB |
Output is correct |
5 |
Correct |
1 ms |
2396 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2396 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
4 |
Correct |
1 ms |
2396 KB |
Output is correct |
5 |
Correct |
1 ms |
2396 KB |
Output is correct |
6 |
Correct |
1 ms |
2396 KB |
Output is correct |
7 |
Correct |
1 ms |
2396 KB |
Output is correct |
8 |
Correct |
2 ms |
2392 KB |
Output is correct |
9 |
Correct |
1 ms |
2396 KB |
Output is correct |
10 |
Correct |
1 ms |
2396 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2392 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2392 KB |
Output is correct |
4 |
Correct |
1 ms |
2648 KB |
Output is correct |
5 |
Correct |
1 ms |
2396 KB |
Output is correct |
6 |
Correct |
1 ms |
2496 KB |
Output is correct |
7 |
Correct |
1 ms |
2396 KB |
Output is correct |
8 |
Correct |
1 ms |
2396 KB |
Output is correct |
9 |
Correct |
1 ms |
2396 KB |
Output is correct |
10 |
Correct |
1 ms |
2396 KB |
Output is correct |
11 |
Correct |
7 ms |
3768 KB |
Output is correct |
12 |
Correct |
8 ms |
3800 KB |
Output is correct |
13 |
Correct |
12 ms |
4312 KB |
Output is correct |
14 |
Correct |
7 ms |
3744 KB |
Output is correct |
15 |
Correct |
18 ms |
5300 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2396 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2392 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
4 |
Correct |
1 ms |
2392 KB |
Output is correct |
5 |
Correct |
1 ms |
2396 KB |
Output is correct |
6 |
Correct |
1 ms |
2396 KB |
Output is correct |
7 |
Incorrect |
1 ms |
2396 KB |
Output isn't correct |
8 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2396 KB |
Output is correct |
2 |
Correct |
1 ms |
2492 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
4 |
Correct |
1 ms |
2396 KB |
Output is correct |
5 |
Correct |
1 ms |
2396 KB |
Output is correct |
6 |
Correct |
1 ms |
2496 KB |
Output is correct |
7 |
Incorrect |
1 ms |
2648 KB |
Output isn't correct |
8 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2392 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
4 |
Correct |
1 ms |
2396 KB |
Output is correct |
5 |
Correct |
1 ms |
2392 KB |
Output is correct |
6 |
Correct |
1 ms |
2392 KB |
Output is correct |
7 |
Incorrect |
1 ms |
2396 KB |
Output isn't correct |
8 |
Halted |
0 ms |
0 KB |
- |