Submission #448693

#TimeUsernameProblemLanguageResultExecution timeMemory
448693MOUF_MAHMALATTenis (COI19_tenis)C++14
100 / 100
317 ms4112 KiB
#include<bits/stdc++.h>
#define all(s) s.begin(),s.end()
using namespace std;
typedef int ll;
ll n,q,a[100009][3],x,y,t,o,u;
ll p[400009],lz[400009];
void push(ll d,ll l,ll r)
{
    p[d]+=lz[d];
    if(l<r)
    {
        lz[d*2]+=lz[d];
        lz[d*2+1]+=lz[d];
    }
    lz[d]=0;
}
void up(ll d,ll l,ll r,ll z)
{
    push(d,l,r);
    if(r<x||l>y)
        return;
    if(x<=l&&y>=r)
    {
        lz[d]+=z;
        push(d,l,r);
        return;
    }
    ll m=(l+r)/2,i=d*2;
    up(i,l,m,z),up(i+1,m+1,r,z);
    p[d]=min(p[i],p[i+1]);
}
ll best(ll d,ll l,ll r)
{
    if(l>y)
        return 1e9;
    push(d,l,r);
    if(r<=y)
        return p[d];
    ll m=(l+r)/2,i=d*2;
    return min(best(i,l,m),best(i+1,m+1,r));
}
int main()
{
    scanf("%d%d",&n,&q);
    for(ll j=0; j<3; j++)
        for(ll i=1; i<=n; i++)
        {
            scanf("%d",&x);
            a[x][j]=i;
        }
    for(ll i=1; i<=n; i++)
    {
        x=min(a[i][0],min(a[i][1],a[i][2]));
        y=max(a[i][0],max(a[i][1],a[i][2]))-1;
        up(1,1,n,1);
    }
    while(q--)
    {
        scanf("%d",&t);
        if(t==1)
        {
            scanf("%d",&x);
            y=min(a[x][0],min(a[x][1],a[x][2]))-1;
            if(best(1,1,n))
                printf("DA\n");
            else
                printf("NE\n");
            continue;
        }
        scanf("%d%d%d",&t,&o,&u),t--;
        x=min(a[o][0],min(a[o][1],a[o][2]));
        y=max(a[o][0],max(a[o][1],a[o][2]))-1;
        up(1,1,n,-1);
        x=min(a[u][0],min(a[u][1],a[u][2]));
        y=max(a[u][0],max(a[u][1],a[u][2]))-1;
        up(1,1,n,-1);

        swap(a[o][t],a[u][t]);
        x=min(a[o][0],min(a[o][1],a[o][2]));
        y=max(a[o][0],max(a[o][1],a[o][2]))-1;
        up(1,1,n,1);
        x=min(a[u][0],min(a[u][1],a[u][2]));
        y=max(a[u][0],max(a[u][1],a[u][2]))-1;
        up(1,1,n,1);
    }
    return 0;
}

Compilation message (stderr)

tenis.cpp: In function 'int main()':
tenis.cpp:44:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |     scanf("%d%d",&n,&q);
      |     ~~~~~^~~~~~~~~~~~~~
tenis.cpp:48:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |             scanf("%d",&x);
      |             ~~~~~^~~~~~~~~
tenis.cpp:59:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   59 |         scanf("%d",&t);
      |         ~~~~~^~~~~~~~~
tenis.cpp:62:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   62 |             scanf("%d",&x);
      |             ~~~~~^~~~~~~~~
tenis.cpp:70:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   70 |         scanf("%d%d%d",&t,&o,&u),t--;
      |         ~~~~~^~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...