QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#962605#7565. Harumachi KazebunH2OTL 2ms20900kbC++144.2kb2025-04-02 22:09:592025-04-02 22:09:59

Judging History

This is the latest submission verdict.

  • [2025-04-02 22:09:59]
  • Judged
  • Verdict: TL
  • Time: 2ms
  • Memory: 20900kb
  • [2025-04-02 22:09:59]
  • Submitted

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...

result: