Submission #904056

# Submission time Handle Problem Language Result Execution time Memory
904056 2024-01-11T19:01:40 Z simona1230 Inside information (BOI21_servers) C++17
0 / 100
205 ms 16488 KB
#include <bits/stdc++.h>

using namespace std;

int n,k;
int in[4001][4001];
char C[240001];
int X[240001],Y[240001];
bool sbt2=1,sbt3=1;
void read()
{
    cin>>n>>k;
    for(int i=1;i<=n+k-1;i++)
    {
        cin>>C[i]>>X[i];
        if(C[i]!='C')cin>>Y[i];
        if(C[i]=='S'&&min(X[i],Y[i])!=1)sbt2=0;
        if(C[i]=='S'&&abs(X[i]-Y[i])!=1)sbt3=0;
    }
}
void slow()
{
    for(int i=1;i<=n;i++)
        in[i][i]=1;
    for(int i=1;i<=n+k-1;i++)
    {
        int x,y;
        char c;
        x=X[i];
        y=Y[i];
        c=C[i];
        if(c=='S')
        {
            for(int j=1;j<=n;j++)
            {
                in[x][j]=in[y][j]=max(in[x][j],in[y][j]);
            }
        }
        if(c=='C')
        {
            int cnt=0;
            for(int j=1;j<=n;j++)
                cnt+=in[j][x];
            cout<<cnt<<endl;
        }
        if(c=='Q')
        {
            if(in[x][y])cout<<"yes"<<endl;
            else cout<<"no"<<endl;
        }
    }
}


int t[120001];
void subt2()
{
    t[1]=1;
    int sec=2;
    for(int i=1;i<=n+k-1;i++)
    {
        int x,y;
        char c;
        x=X[i];
        y=Y[i];
        c=C[i];
        if(c=='S')
        {
            t[max(x,y)]=sec++;
        }

        if(c=='Q')
        {
            if(t[y]&&t[y]<=t[x]||x==1&&t[y]||y==1&&t[x]||x==y)cout<<"yes"<<endl;
            else cout<<"no"<<endl;
        }

        if(c=='C')
        {
            if(t[x]==0)cout<<1<<endl;
            else if(x==1)cout<<sec-1<<endl;
            else cout<<sec-t[x]+1<<endl;
        }
    }
}

int inc[120001],de[120001];
int find_inc(int ver)
{
    if(ver==inc[ver])return ver;
    return inc[ver]=find_inc(inc[ver]);
}
int find_de(int ver)
{
    if(ver==de[ver])return ver;
    return de[ver]=find_de(de[ver]);
}

void subt3()
{
    int sec=1;
    for(int i=1;i<=n+k-1;i++)
    {
        int x,y;
        char c;
        x=X[i];
        y=Y[i];
        c=C[i];
        if(c=='S')
        {
            if(y<x)swap(x,y);
            t[x]=sec++;
            inc[x]=de[x]=x;
            if(t[x-1])inc[x-1]=x;
            if(t[x+1])de[x+1]=x;
        }
        if(c=='Q')
        {
            swap(x,y);
            int ver=x;
            if(y>x)
            {
                if(!t[ver])
                {
                    cout<<"no"<<endl;
                    continue;
                }
                ver=find_inc(ver);
                if(ver+1>=y)cout<<"yes"<<endl;
                else cout<<"no"<<endl;
            }
            else if(x>y)
            {
                if(!t[ver-1])
                {
                    cout<<"no"<<endl;
                    continue;
                }
                ver=find_de(ver-1);
                if(ver<=y)cout<<"yes"<<endl;
                else cout<<"no"<<endl;
            }
            else cout<<"yes"<<endl;
        }
        if(c=='C')
        {
            int cnt=1;
            /*for(int j=1;j<n;j++)
                cout<<inc[j]<<" ";
            cout<<endl;*/
            if(x!=n&&t[x])
            {
                //cout<<"! "<<x<<endl;
                cnt+=find_inc(x)-x+1;
            }
            if(x!=1&&t[x-1])
            {
                //cout<<"!! "<<x-1<<endl;
                cnt+=x-find_de(x-1);
            }
            cout<<cnt<<endl;
        }
    }
}

int cnt[1000001];
int p[1000001];
int used[1000001];

void subt4()
{
    for(int i=1;i<=n;i++)
        cnt[i]=1;
    int sec=1;
    for(int i=1;i<=n+k-1;i++)
    {
        //cout<<i<<": "<<endl;
        int x=X[i],y=Y[i];
        char c=C[i];
        if(c=='S')
        {
            int ver=max(x,y);
            p[ver]=min(x,y);
            t[ver]=sec++;
            int last=sec;
            while(p[ver]&&t[ver]<last&&t[ver])
            {
                last=t[ver];
                ver=p[ver];
                //cout<<ver<<" "<<cnt[max(x,y)]<<endl;
                cnt[ver]+=cnt[max(x,y)];
            }
        }
        if(c=='C')
        {
            int curr=cnt[x],ver=x,last=0;
            if(t[x])curr--;
            if(t[x]&&t[x*2]&&t[x*2]>t[x])curr-=cnt[x*2];
            if(t[x]&&t[x*2+1]&&t[x*2+1]>t[x])curr-=cnt[x*2+1];
            while(p[ver]&&t[ver]>last&&t[ver])
            {
                last=t[ver];
                ver=p[ver];
                //cout<<ver<<" - "<<cnt[ver]<<endl;
                curr+=cnt[ver];
            }
            cout<<curr<<endl;
        }
        if(c=='Q')
        {
            int ver=y,last=0;
            bool pos=0;
            while(p[ver]&&t[ver]>last&&t[ver])
            {
                last=t[ver];
                ver=p[ver];
                used[ver]=i;
                if(ver==x)pos=1;
            }

            ver=x,last=sec;
            while(p[ver]&&t[ver]<last&&t[ver])
            {
                last=t[ver];
                ver=p[ver];
                if(used[ver]==i||ver==y)pos=1;
            }

            if(pos)cout<<"yes"<<endl;
            else cout<<"no"<<endl;
        }
    }
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	read();
	/*if(n<=4000)slow();
    else if(sbt2)subt2();
    else if(sbt3)subt3();
    else*/ subt4();
	return 0;
}

Compilation message

servers.cpp: In function 'void subt2()':
servers.cpp:74:20: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   74 |             if(t[y]&&t[y]<=t[x]||x==1&&t[y]||y==1&&t[x]||x==y)cout<<"yes"<<endl;
      |                ~~~~^~~~~~~~~~~~
servers.cpp:74:50: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   74 |             if(t[y]&&t[y]<=t[x]||x==1&&t[y]||y==1&&t[x]||x==y)cout<<"yes"<<endl;
      |                                              ~~~~^~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 152 ms 7756 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 152 ms 7756 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 197 ms 7664 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 197 ms 7664 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 143 ms 7764 KB Output is correct
2 Incorrect 205 ms 16488 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 143 ms 7764 KB Output is correct
2 Incorrect 205 ms 16488 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 146 ms 8056 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 146 ms 8056 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 157 ms 7840 KB Output is correct
2 Incorrect 194 ms 16464 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 157 ms 7840 KB Output is correct
2 Incorrect 194 ms 16464 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 150 ms 7852 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 150 ms 7852 KB Output isn't correct
2 Halted 0 ms 0 KB -