#include "koala.h"
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int maxn = 1e5 + 10;
int minValue(int N, int W)
{
    int n = N;
    int b[N+1], r[N+1];
    for (int i = 0; i < N; ++ i)
    {
        b[i] = 0;
        r[i] = 0;
    }
    b[0] = 1;
    playRound(b, r);
    for (int i = 0; i < n; ++ i)
        if(r[i] == 0)return i;
    return 0;
}
int maxValue(int N, int W)
{
    int n = N;
    int b[n+1], r[n+1];
    vector < int > pot;
    for (int i = 0; i < n; ++ i)
        pot.pb(i);
    while(pot.size() > 1)
    {
        int dajba = n/pot.size();
        for (int i = 0; i < n; ++ i)
        {
            b[i] = 0;
            r[i] = 0;
        }
        for (int i = 0; i < pot.size(); ++ i)
        {
            int x = pot[i];
            b[x] = dajba;
        }
        playRound(b, r);
        vector < int > newpot;
        for (int i = 0; i < pot.size(); ++ i)
        {
            int taken = pot[i];
            if(r[taken])newpot.pb(taken);
        }
        pot = newpot;
    }
    return pot[0];
}
int greaterValue(int N, int W)
{
    int n = N;
    int b[N], r[N];
    int l = 0, ri = 9, mid;
    while(l <= ri)
    {
        mid = (l + ri)/2;
        for (int i = 0; i < n; ++ i)
        {
            b[i] = 0;
            r[i] = 0;
        }
        b[0] = b[1] = mid;
        playRound(b, r);
        if(r[0] == r[1])
        {
            if(r[0])l = mid + 1;
            else ri = mid - 1;
        }
        else if(r[0])return 0;
        else return 1;
    }
    return 0;
}
int n, w;
int b[maxn], rk[maxn];
vector < int > solve(vector < int > g, int l, int r)
{
    for (int i = 0; i < g.size(); ++ i)
    {
        int x = g[i];
    }
    vector < int > ans;
    if(r < l)return ans;
    if(l == r)return g;
    int sz = r - l + 1;
    int dajba = min((int)(sqrt(2*l)), w / sz);
    for (int i = 0; i < n; ++ i)
    {
        b[i] = 0;
        rk[i] = 0;
    }
    for (int i = 0; i < g.size(); ++ i)
    {
        b[g[i]] = dajba;
    }
    playRound(b, rk);
    vector < int > bigger, smaller;
    for (int i = 0; i < n; ++ i)
    {
        if(b[i] && rk[i])bigger.pb(i);
        else if(b[i])smaller.pb(i);
    }
    int cnt1 = smaller.size();
    int cnt2 = bigger.size();
    smaller = solve(smaller, l, l + cnt1 - 1);
    bigger = solve(bigger, l + cnt1, r);
    for (int i = 0; i < smaller.size(); ++ i)
        ans.pb(smaller[i]);
    for (int i = 0; i < bigger.size(); ++ i)
        ans.pb(bigger[i]);
    return ans;
}
void allValues(int N, int W, int *P)
{
    n = N;
    w = W;
    if (W == 2*N)
    {
        vector < int > g;
        for (int i = 0; i < N; ++ i)
            g.pb(i);
        g = solve(g, 1, N);
        for (int i = 0; i < g.size(); ++ i)
        {
            int pos = g[i];
            P[pos] = i + 1;
        }
    }
    else
    {
        vector < int > g;
        for (int i = 0; i < N; ++ i)
            g.pb(i);
        g = solve(g, 1, N);
        for (int i = 0; i < g.size(); ++ i)
        {
            int pos = g[i];
            P[pos] = i + 1;
        }
    }
}
| # | 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... |