QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#803464 | #1458. Binary Search Algorithm | peimuda | ML | 1ms | 3656kb | C++14 | 3.2kb | 2024-12-07 17:14:49 | 2024-12-07 17:14:56 |
Judging History
answer
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<algorithm>
#include<bits/stdc++.h>
#define pr pair
#define f first
#define s second
#define ll long long
#define mp make_pair
#define pll pr<ll,ll>
#define pii pr<int,int>
#define piii pr<int,pii>
using namespace std;
int rt;
int ls[8003],rs[8003];
int fa[8003];
int md[8003];
//bool in[8003];
int cv[8003];
void upd(int x)
{
if(ls[x]>=0&&rs[x]>=0)
{
md[x]=min(md[ls[x]],md[rs[x]])+1;
if(cv[ls[x]]>cv[rs[x]]) swap(ls[x],rs[x]);
}
else
{
md[x]=0;
if(rs[x]>=0) swap(ls[x],rs[x]);
}
if(ls[x]>=0) fa[ls[x]]=x;
if(rs[x]>=0) fa[rs[x]]=x;
}
void upm(int x)
{
if(x==-1) return;
if(ls[x]>=0&&rs[x]>=0) md[x]=min(md[ls[x]],md[rs[x]])+1;
else md[x]=0;
upm(fa[x]);
}
int main()
{
ios_base::sync_with_stdio(0);
int n;
cin>>n;
rt=-1;
string tp;
int x;
n*=2;
int cs=0;
while(n--)
{
cin>>tp>>x;
x--;
if(tp=="add")
{
cs++;
ls[x]=-1;
rs[x]=-1;
if(rt==-1)
{
cout<<0<<endl;
cout.flush();
rt=x;
}
else
{
vector<int> v;
v.push_back(rt);
v.push_back(x);
vector<int> g;
int j;
for(j=rt;rs[j]!=-1;)
{
v.push_back(ls[j]);
v.push_back(rs[j]);
g.push_back(j);
if(md[ls[j]]<=md[rs[j]]) j=ls[j];
else j=rs[j];
}
g.push_back(j);
cout<<v.size();
for(int i:v) cout<<' '<<i+1;
cout<<endl;
cout.flush();
for(int i=0;i<v.size();i++)
{
int o;
cin>>o;
o--;
cv[o]=i;
}
rs[j]=x;
int i;
for(i=g.size()-1;i>=0;i--)
{
if(cv[g[i]]<cv[x]) break;
int s=g[i];
if(i>0)
{
if(ls[g[i-1]]==s) ls[g[i-1]]=x;
else rs[g[i-1]]=x;
}
else rt=x;
swap(ls[x],ls[s]);
swap(rs[x],rs[s]);
if(ls[x]==x) ls[x]=s;
else rs[x]=s;
upd(s);
}
upd(x);
for(;i>=0;i--) upd(g[i]);
}
fa[rt]=-1;
}
else
{
cs--;
if(cs==0)
{
cout<<0<<endl;
cout.flush();
rt=-1;
}
else
{
vector<int> v;
vector<int> g;
int j;
for(j=x;ls[j]!=-1;j=ls[x])
{
v.push_back(ls[j]);
if(rs[j]>=0) v.push_back(rs[j]);
g.push_back(ls[j]);
}
cout<<v.size();
for(int i:v) cout<<' '<<i+1;
cout<<endl;
cout.flush();
for(int i=0;i<v.size();i++)
{
int o;
cin>>o;
o--;
cv[o]=i;
}
// cout<<"Oh "<<g.size()<<endl;
int rf=fa[x];
for(int i=0;i<g.size();i++)
{
int s=g[i];
if(fa[x]!=-1)
{
if(ls[fa[x]]==x) ls[fa[x]]=s;
else rs[fa[x]]=s;
}
else rt=s;
fa[s]=fa[x];
fa[x]=s;
ls[x]=ls[s];
ls[s]=x;
swap(rs[x],rs[s]);
}
if(ls[fa[x]]==x) ls[fa[x]]=-1;
else rs[fa[x]]=-1;
for(int i=((int)g.size())-1;i>=0;i--) upd(g[i]);
if(g.size()) upm(fa[g[0]]);
else upm(rf);
fa[rt]=-1;
}
}
// for(int i=0;i<5;i++) cout<<ls[i]<<' ';
// cout<<endl;
// for(int i=0;i<5;i++) cout<<rs[i]<<' ';
// cout<<endl;
// for(int i=0;i<5;i++) cout<<fa[i]<<' ';
// cout<<endl;
// for(int i=0;i<5;i++) cout<<md[i]<<' ';
// cout<<endl;
if(rt==-1) cout<<"-1"<<endl;
else cout<<rt+1<<endl;
cout.flush();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3656kb
input:
3 add 1 add 3 3 1 delete 1 add 2 3 2 delete 3 2 delete 2
output:
0 1 2 1 3 3 0 3 2 3 2 3 1 2 2 0 -1
result:
ok n=3, OK
Test #2:
score: 0
Accepted
time: 1ms
memory: 3596kb
input:
10 add 9 add 4 9 4 add 6 9 6 delete 9 4 6 add 7 7 4 delete 4 add 5 7 5 add 8 7 5 8 6 add 10 7 10 5 8 delete 8 6 add 3 3 7 10 6 add 2 3 7 6 2 delete 6 2 delete 10 delete 7 5 add 1 3 1 5 2 delete 1 5 delete 3 5 2 delete 5 2 delete 2
output:
0 9 2 9 4 9 2 9 6 9 2 4 6 4 2 4 7 7 0 7 2 7 5 7 4 7 8 6 5 7 4 7 10 5 8 7 1 6 7 4 7 3 10 6 3 4 3 2 7 6 3 1 2 3 0 3 1 5 3 4 3 1 5 2 3 1 5 3 2 5 2 5 1 2 2 0 -1
result:
ok n=10, OK
Test #3:
score: -100
Memory Limit Exceeded
input:
100 add 81 add 96 81 96 add 94 81 94 add 32 81 94 32 96 add 35 81 94 32 35 add 59 81 94 32 59 add 50 81 50 94 32 add 57 81 50 57 94 32 96 add 39 39 81 50 57 94 32 add 55 39 81 50 94 32 55 add 23 39 81 50 94 23 32 add 40 39 81 40 94 59 35 add 5 39 81 40 94 59 5 add 2 39 81 40 94 59 2 delete 55 add 12
output:
0 81 2 81 96 81 2 81 94 81 4 81 32 96 94 81 4 81 35 94 32 81 4 81 59 94 32 81 4 81 50 94 32 81 6 81 57 50 94 96 32 81 6 81 39 50 94 57 32 39 6 39 55 81 94 50 32 39 6 39 23 81 94 50 32 39 6 39 40 81 94 35 59 39 6 39 5 81 40 94 59 39 6 39 2 81 40 94 59 39 0 39