Submission #1368031

#TimeUsernameProblemLanguageResultExecution timeMemory
1368031settopGuessing Game (EGOI23_guessinggame)C++20
89 / 100
407 ms4968 KiB
#include<bits/stdc++.h>
 
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
 
#define int long long
#define double long double
#define ordered_set tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update>
#define S second
#define F first
#define fall(i,a,n) for(int i=a;i<=n;i++)
#define rfall(i,a,n) for(int i=a;i>=n;i--)
#define pb push_back
#define all(x) x.begin(),x.end()
#define lsb(x) (x & -x)
#define sz(x) (int)x.size()
const int MAXN=1e5+10;
const int MAXL=30;
const int inf=1e14;
const int MOD=998244353;
const int HASHBASE=146527;
const int HASHMOD=1e9+7;
const int SQRT=350;
 
typedef pair<int,int> pii;
typedef tuple<int,int,int> trio;
typedef tuple<int,int,int,int> squad; 
 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int seg[4*MAXN];

int add_element(int ind,int l,int r,int a,int dep=1){
  seg[ind]++;
  if(seg[ind]==r-l+1) return dep;
  int m=(l+r)>>1;
  if(a<=m) return add_element(2*ind,l,m,a,dep+1);
  return add_element(2*ind+1,m+1,r,a,dep+1);
}

int32_t main(){
  std::ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  
  int P,n; cin>>P>>n;
  if(P==1){
    cout<<"18"<<endl;
    fall(i,1,n-1){
      int x; cin>>x;
      cout<<add_element(1,0,n-1,x)<<endl;
    }
  }
  else{
    vector<int> v(n);
    int ans=-1;
    for(auto &u:v) cin>>u;
    fall(i,0,n-1) if(v[i]==1) ans=i;
    if(ans!=-1){
      cout<<ans<<" "<<ans<<endl;
      return 0;
    }
    
    auto solve_range=[&](auto &&self,int l,int r)->void{
      if(r-l<=1){
        cout<<l<<" "<<r<<endl;
        return;
      }
      fall(i,l,r) v[i]--;
      int m=(l+r)>>1;
      int pa=-1,pb=-1;
      fall(i,l,m) if(v[i]==1) pa=i;
      fall(i,m+1,r) if(v[i]==1) pb=i;
      if(pa!=-1 && pb!=-1){
        cout<<pa<<" "<<pb<<endl;
        return;
      }
      if(pa==-1) self(self,l,m);
      else self(self,m+1,r);
    };  

    solve_range(solve_range,0,n-1);  
  }
} 
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...