Submission #1334410

#TimeUsernameProblemLanguageResultExecution timeMemory
1334410kenkunkinLibrary (JOI18_library)C++20
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
#include "library.h"

using namespace std;


typedef pair<int,int> pii;
const int maxn=1e3+5;
vector <int> b;
vector <int> g[maxn];
pii d[maxn];
int m=0,n;;

void flip(vector<int> &v)
{
    int i=0,j=v.size()-1;
    while (i<=j)
    {
        swap(v[i],v[j]);
        i++,j--;
    }
}
int check(int l,int r,int id)
{
    int com=0;
    vector <int> v(n);
    for (int i=0;i<n;i++)    v[i]=0;
    v[id]=1;
    for (int i=l;i<=r;i++)
    {
        if (g[i].empty())   continue;
        com++;
        for (int j=0;j<g[i].size();j++)
            v[g[i][j]]=1;
    }
    return com-Query(v);
}
int xuly(int id,int l,int r)
{
    int lo=l,hi=r,ans=0;
    while (lo<=hi)
    {
        int mi=(lo+hi)/2;;
        if (check(lo,mi,id)==0)
        {
            ans=mi;
            hi=mi-1;
        }
        else
        {
            if (mi+1<=hi)
                ans=mi+1;
            lo=mi+1;
        }
    }
    return ans;
}


int sum=0;
void Solve(int N)
{
    n=N;
    b.resize(n);
    for (int i=0;i<n;i++)    b[i]=0;
    for (int i=0;i<n;i++)
    {
        b[i]=1;
        int sum2=Query(b);
        if (sum2-sum==1)
        {
            g[++m].push_back(i);
        }
        else if (sum2-sum==0)
        {
            int id=xuly(i,1,m);
            int l=g[id][0],r=g[id].back();
            vector <int> v(n);
            for (int j=0;j<n;j++)   v[j]=0;
            v[r]=1,v[i]=1;
            if (Query(v)>1)
                flip(g[id]);
            g[id].push_back(i);
        }
        else
        {
            int lo=1,hi=m,x,y;
            while (lo<=hi)
            {
                int mi=(lo+hi)/2;
                int bien=check(lo,mi,i);
                if (bien==-1)    hi=mi-1;
                else if (bien==1)   lo=mi+1;
                else
                {
                    x=xuly(i,lo,mi);
                    y=xuly(i,mi+1,hi);
                    break;
                }
            }

            vector <int> v(n);
            for (int j=0;j<n;j++)   v[j]=0;
            v[i]=1,v[g[x].back()]=1;
            if (Query(v)>1)
                flip(g[x]);
            g[x].push_back(i);
            for (int j=0;j<n;j++)   v[j]=0;
            v[i]=1,v[g[y][0]]=1;
            if (Query(v)>1)
                flip(g[y]);
            for (int j=0;j<g[y].size();j++)
                g[x].push_back(g[y][j]);
            g[y].clear();

        }
        sum=sum2;
    }
    for (int i=1;i<=m;i++)
        if (!g[i].empty())
        {
            for (int j=0;j<g[i].size();j++)
                g[i][j]++;
            Answer(g[i]);
            return;
        }
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...