#include "minerals.h"
#include<iostream>
#include<stack>
#include<map>
#include<vector>
#include<string>
#include<cassert>
#include<unordered_map>
#include <queue>
#include <cstdint>
#include<cstring>
#include<limits.h>
#include<cmath>
#include<set>
#include<algorithm>
#include <iomanip>
#include<numeric>
#include<bitset>
using namespace std;
#define ll long long
#define f first
#define s second
#define pii pair<int,int>
#define ppii pair<int,pii>
#define vi vector<int>
#define pb push_back
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define F(n) for(int i=0;i<n;i++)
#define lb lower_bound
#define ub upper_bound
#define fastio ios::sync_with_stdio(false);cin.tie(NULL);
#pragma GCC optimize ("03,unroll-lopps")
const ll inf=1e9,mxn=1e5;
/*
dnc + parallel bsearch?
*/
int done[mxn+10],ans[mxn+10],on[mxn+10],n;
int done2[mxn+10];
pii bound[mxn+10];
int st[mxn+10];
int cl,cr,cs=0;
void solve(){
vector<int>have;
cl=1,cr=n;
int last=0;
vector<int>o;
for(int i=1;i<=n;i++){
if(Query(i)>last)have.pb(i),last++,st[i]=1;
else o.pb(i);
}
for(auto i:have){
int x=lb(all(o),i)-o.begin();
bound[i].f=x,bound[i].s=o.size()-1,ans[i]=x-1;
}
cs=n/2;
for(int k=0;k<20;k++){
vector<pii>q;
for(auto i:have){
if(bound[i].f<=bound[i].s){
q.pb({(bound[i].s+bound[i].f)/2,i});
}
else if(!done[i]){
done[i]=1;
done[o[ans[i]+1]]=1;
Answer(i,o[ans[i]+1]);
}
}
if(q.empty())break;
sort(all(q));
int cur=0;
for(int i=0;i<o.size();i++){
if(!done[o[i]])cs=Query(o[i]);
while(cur<q.size()&&q[cur].f==i){
if(k%2==0){
if(Query(q[cur].s)==cs){
bound[q[cur].s].f=q[cur].f+1;
ans[q[cur].s]=max(ans[q[cur].s],q[cur].f);
}
else bound[q[cur].s].s=q[cur].f-1,cs--;
}
else{
if(Query(q[cur].s)==cs+1){
bound[q[cur].s].f=q[cur].f+1;
ans[q[cur].s]=max(ans[q[cur].s],q[cur].f);
cs++;
}
else bound[q[cur].s].s=q[cur].f-1;
}
cur++;
}
}
}
}
void Solve(int N){
n=2*N;
solve();
}
/*
p bs?
*/
Compilation message (stderr)
minerals.cpp:33:40: warning: bad option '-funroll-lopps' to pragma 'optimize' [-Wpragmas]
33 | #pragma GCC optimize ("03,unroll-lopps")
| ^
minerals.cpp:43:12: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
43 | void solve(){
| ^
minerals.cpp:95:17: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
95 | void Solve(int N){
| ^
# | 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... |
# | 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... |