QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#962605 | #7565. Harumachi Kaze | bunH2O | TL | 2ms | 20900kb | C++14 | 4.2kb | 2025-04-02 22:09:59 | 2025-04-02 22:09:59 |
Judging History
answer
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<cmath>
#include<ctime>
#include<cassert>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
const ll inf=9e18;
const ll mod=1e9+87;
inline ll read()
{
// ll x=0,f=1;
// char ch=getchar();
// while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
// return x*f;
ll x;cin>>x;return x;
}
inline char getc()
{
char ch=getchar();
while(ch!='0'&&ch!='1'){ch=getchar();}
return ch;
}
ll add(ll x,ll y)
{
if(x<0)return y;
if(y<0)return x;
cout<<"A "<<x<<' '<<y<<endl;
ll r;cin>>r;return r;
}
bool cmp(ll x,ll y)
{
assert(x>=0&&y>=0);
cout<<"C "<<x<<' '<<y<<endl;
ll p;cin>>p;return (p!=y);
}
ll n,q,B,m;
ll a[100005],b[100005];
ll qtp[100005],qt[100005],qpos[100005],qx[100005];
ll lg2[100005],id[100005][21][2];
struct node
{
ll ls,rs,x;
}tree[800005];
ll cntn=2;
void pushup(ll rt)
{
ll ls=tree[rt].ls,rs=tree[rt].rs;
if(tree[ls].x<0)tree[rt].x=tree[rs].x;
else if(tree[rs].x<0)tree[rt].x=tree[ls].x;
else tree[rt].x=add(tree[ls].x,tree[rs].x);
}
void build(ll rt,ll l,ll r,bool tp)
{
id[l][lg2[r-l+1]][tp]=rt;
if(l==r)
{
tree[rt].x=(l<=n?(!tp?a[l]:b[l]):-1);
return;
}
ll mid=(l+r)>>1;
tree[rt].ls=(++cntn),tree[rt].rs=(++cntn);
build(tree[rt].ls,l,mid,tp),build(tree[rt].rs,mid+1,r,tp);
// cout<<rt<<' '<<l<<' '<<r<<' '<<tree[rt].x<<'\n';
pushup(rt);
}
void upd(ll rt,ll l,ll r,ll pos,ll x)
{
if(l==r)
{
tree[rt].x=x;
return;
}
ll mid=(l+r)>>1,ls=tree[rt].ls,rs=tree[rt].rs;
if(pos<=mid)upd(ls,l,mid,pos,x);
if(mid+1<=pos)upd(rs,mid+1,r,pos,x);
pushup(rt);
}
ll res[100005],cntr;
void solve()
{
n=read(),q=read(),B=read();
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<=n;i++)b[i]=read();
for(int i=1;i<=q;i++)
{
qtp[i]=read();
if(qtp[i]==1)qt[i]=read(),qpos[i]=read(),qx[i]=read();
else qx[i]=read();
}
m=16384;
lg2[0]=-1;for(int i=1;i<=m;i++)lg2[i]=lg2[i>>1]+1;
build(1,1,m,0),build(2,1,m,1);
for(int i=1;i<=q;i++)
{
ll op=qtp[i];
if(op==1)
{
ll t=qt[i],pos=qpos[i],x=qx[i];
upd(t,1,m,pos,x);
}
if(op==2)
{
cntr++;
ll k=qx[i]-1,pa=0,pb=0,ida=-1,idb=-1;
while(k)
{
if(pa==n||pb==n)break;
ll p=lg2[(k+1)/2],rida=0,ridb=0;
if(pa+(1<<p)<=n)rida=add(ida,tree[id[pa+1][p][0]].x);
else rida=1;
if(pb+(1<<p)<=n)ridb=add(idb,tree[id[pb+1][p][1]].x);
else ridb=2;
bool ok=cmp(rida,ridb);
if(ok)ida=rida,k-=min(n-pa,(1ll<<p)),pa=min(pa+(1<<p),n);
else idb=ridb,k-=min(n-pb,(1ll<<p)),pb=min(pb+(1<<p),n);
}
if(pa==n)
{
k++;
for(int j=20;j>=0;j--)
{
if((1<<j)&k)idb=add(idb,tree[id[pb+1][j][1]].x),pb+=(1<<j);
}
res[cntr]=idb;
continue;
}
if(pb==n)
{
k++;
for(int j=20;j>=0;j--)
{
if((1<<j)&k)ida=add(ida,tree[id[pa+1][j][0]].x),pa+=(1<<j);
}
res[cntr]=ida;
continue;
}
ida=add(ida,tree[id[pa+1][0][0]].x),idb=add(idb,tree[id[pb+1][0][1]].x);
if(cmp(ida,idb))res[cntr]=ida;
else res[cntr]=idb;
}
}
cout<<"! "<<cntr<<endl;
for(int i=1;i<=cntr;i++)cout<<res[i]<<' ';cout<<endl;
}
int main()
{
// freopen("prob.in","r",stdin);
// freopen("prob1.out","w",stdout);
clock_t start=clock();
ll c=0,t=1;
while(t--)solve();
clock_t end=clock();
// cerr<<(end-start)*1.00/CLOCKS_PER_SEC<<'\n';
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 2ms
memory: 20560kb
input:
2 3 2 288230376151711744 864691128455135232 1441151880758558720 2017612633061982208 2 3 1 2 2 2594073385365405696 2 3 1152921504606846976 3458764513820540928 288230376151711744 1152921504606846976 1152921504606846976 4035225266123964416 288230376151711744 1152921504606846976 1152921504606846976
output:
A 288230376151711744 864691128455135232 A 1441151880758558720 2017612633061982208 C 288230376151711744 1441151880758558720 A 288230376151711744 864691128455135232 C 1152921504606846976 1441151880758558720 A 1441151880758558720 2594073385365405696 C 288230376151711744 1441151880758558720 A 2882303761...
result:
ok 2 lines
Test #2:
score: 0
Accepted
time: 1ms
memory: 20900kb
input:
3 5 3 2017612633061982208 864691128455135232 2305843009213693952 1441151880758558720 2017612633061982208 288230376151711744 2 5 2 2 1 1 3 1729382256910270464 1 2 1 2017612633061982208 2 5 2882303761517117440 5188146770730811392 3458764513820540928 3746994889972252672 2882303761517117440 518814677073...
output:
A 2017612633061982208 864691128455135232 A 2882303761517117440 2305843009213693952 A 1441151880758558720 2017612633061982208 A 3458764513820540928 288230376151711744 C 2882303761517117440 3458764513820540928 A 2882303761517117440 2305843009213693952 C 5188146770730811392 1441151880758558720 A 288230...
result:
ok 2 lines
Test #3:
score: -100
Time Limit Exceeded
input:
16000 20000 14 12381691541923575949 2314459967875656919 15240288079556723088 320873566057825844 1013209648229540810 17538037439317817183 11476444495745028170 14967174865083701448 17232652930598276562 7175999203534983334 4597650078600036201 13978217693115848142 17682091621678261784 488328147143975490...
output:
A 9223372036854775807 9223372036854775807 A 9223372036854775807 9223372036854775807 A 32 32 A 9223372036854775807 9223372036854775807 A 9223372036854775807 9223372036854775807 A 32 32 A 32 32 A 9223372036854775807 9223372036854775807 A 9223372036854775807 9223372036854775807 A 32 32 A 92233720368547...