# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
903363 | simona1230 | Inside information (BOI21_servers) | C++17 | 171 ms | 5796 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
int n,k;
int in[4001][4001];
char c[120001];
int x[120001],y[120001];
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];
}
}
void slow()
{
for(int i=1;i<=n;i++)
in[i][i]=1;
for(int i=1;i<=n+k-1;i++)
{
if(c[i]=='S')
{
for(int j=1;j<=n;j++)
{
in[x[i]][j]=in[y[i]][j]=max(in[x[i]][j],in[y[i]][j]);
}
}
if(c[i]=='C')
{
int cnt=0;
for(int j=1;j<=n;j++)
cnt+=in[j][x[i]];
cout<<cnt<<endl;
}
if(c[i]=='Q')
{
if(in[x[i]][y[i]])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++)
{
if(c[i]=='S')
{
t[max(x[i],y[i])]=sec++;
}
if(c[i]=='Q')
{
if(t[y[i]]&&t[y[i]]<=t[x[i]]||x[i]==1&&t[y[i]]||y[i]==1&&t[x[i]]||x[i]==y[i])cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
if(c[i]=='C')
{
if(t[x[i]]==0)cout<<1<<endl;
else if(x[i]==1)cout<<sec-1<<endl;
else cout<<sec-t[x[i]]+1<<endl;
}
}
}
int inc[120001],de[120001];
int find_inc(int ver)
{
cout<<ver<<endl;
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++)
{
if(c[i]=='S')
{
if(y[i]<x[i])swap(x[i],y[i]);
t[x[i]]=sec++;
inc[x[i]]=de[x[i]]=x[i];
if(t[x[i]-1])inc[x[i]-1]=x[i];
if(t[x[i]+1])de[x[i]+1]=x[i];
}
if(c[i]=='Q')
{
int ver=x[i];
if(y[i]>x[i])
{
if(!t[ver])
{
cout<<"no"<<endl;
continue;
}
ver=find_inc(ver);
if(ver+1>=y[i])cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
else if(x[i]>y[i])
{
if(!t[ver-1])
{
cout<<"no"<<endl;
continue;
}
ver=find_de(ver-1);
if(ver<=y[i])cout<<"y[i]es"<<endl;
else cout<<"no"<<endl;
}
else cout<<"yes"<<endl;
}
if(c[i]=='C')
{
int cnt=0;
if(x[i]!=n&&t[x[i]])
{
cout<<"! "<<x[i]<<endl;
cnt+=find_inc(x[i])-x[i]+1;
}
if(x[i]!=1&&t[x[i]-1])
{
cout<<"!! "<<x[i]-1<<endl;
cnt+=x[i]-find_de(x[i]-1);
}
cout<<cnt<<endl;
}
}
}
bool sbt2,sbt3;
void check()
{
sbt2=1;
for(int i=1;i<=n+k-1;i++)
{
if(c[i]=='S'&&min(x[i],y[i])!=1)sbt2=0;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
read();
check();
if(n<=4000)slow();
else if(sbt2)subt2();
else subt3();
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |