#include "koala.h"
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
//#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
const int MOD = 1e9+7, LIM = 1e6+1, inf = 2e9;
int minValue(int N, int W) {
int B[N],R[N];
B[0] = 1;
for (int j = 1;j<N;j++) B[j] = 0;
playRound(B,R);
for (int j = 1;j<N;j++) {
if (!R[j]) return j;
}
B[1] = 1;
B[0] = 0;
playRound(B,R);
if (!R[0]) return 0;
for (int j = 1;j<N;j++) {
if (!R[j]) return j;
}
return -1;
}
int maxValue(int N, int W) {
assert(N == W && W == 100);
int B[N]{},R[N]{};
for (int i = 0;i<N;i++) B[i] = 1;
vi top50;
playRound(B,R);
for (int i = 0;i<N;i++) if (R[i] == 2) top50.push_back(i);
for (int i = 0;i<N;i++) B[i] = 0;
for (auto it : top50) B[it] = 2;
playRound(B,R);
vi top25;
for (int i = 0;i<N;i++) if (R[i] == 3) top25.push_back(i);
for (int i = 0;i<N;i++) B[i] = 0;
for (auto it : top25) B[it] = 4;
playRound(B,R);
vi top9;
for (int i = 0;i<N;i++) if (R[i] == 5) top9.push_back(i);
for (int i = 0;i<N;i++) B[i] = 0;
for (auto it : top9) B[it] = 11;
playRound(B,R);
for (int i = 0;i<N;i++) if (R[i] == 12) return i;
}
int greaterValue(int N, int W) {
int B[N]{},R[N];
int l = 1;
int r = min(9,N/2);
while (l<=r) {
int mid = (l+r) >> 1;
B[0] = B[1] = mid;
playRound(B,R);
if ((R[0] > mid) != (R[1] > mid)) return R[0] < R[1];
if (R[0] > mid) l = mid+1;
else r = mid-1;
}
}
int greaterValue2(int N,int a,int b) {
int B[N]{},R[N];
int l = 1;
int r = min(9,N/2);
while (l<=r) {
int mid = (l+r) >> 1;
B[a] = B[b] = mid;
playRound(B,R);
if ((R[a] > mid) != (R[b] > mid)) return R[a] < R[b];
if (R[a] > mid) l = mid+1;
else r = mid-1;
}
}
void mergesort(int* P,int l,int r,const int N) {
if (l == r) {
P[l] = 1;
return;
}
int m = (l+r) >> 1;
mergesort(P,l,m,N);
mergesort(P,m+1,r,N);
vector<pii> sol,sag;
for (int j = l;j<=m;j++) sol.push_back({P[j],j});
for (int j = m+1;j<=r;j++) sag.push_back({P[j],j});
sort(all(sol)),sort(all(sag));
int ctr = 1;
int ptr1 = 0,ptr2 = 0;
while (ptr1 != big(sol) || ptr2 != big(sag)) {
if (ptr1 == big(sol)) P[sag[ptr2++].ss] = ctr++;
else if (ptr2 == big(sag)) P[sol[ptr1++].ss] = ctr++;
else {
if (greaterValue2(N,sol[ptr1].ss,sag[ptr2].ss)) P[sol[ptr1++].ss] = ctr++;
else P[sag[ptr2++].ss] = ctr++;
}
}
}
void allValues(int N, int W, int *P) {
mergesort(P,0,N-1,N);
}
Compilation message (stderr)
koala.cpp: In function 'int maxValue(int, int)':
koala.cpp:56:1: warning: control reaches end of non-void function [-Wreturn-type]
56 | }
| ^
koala.cpp: In function 'int greaterValue(int, int)':
koala.cpp:70:1: warning: control reaches end of non-void function [-Wreturn-type]
70 | }
| ^
koala.cpp: In function 'int greaterValue2(int, int, int)':
koala.cpp:83:1: warning: control reaches end of non-void function [-Wreturn-type]
83 | }
| ^| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |