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;
#define ll long long
#define endl '\n'
#define FF first
#define SS second
#define all(a) a.begin(), a.end()
#define mod (ll)(1000000007)
const int inf=1e9;
int n, q1, q2, m;
vector<vector<int>>A;
map<int, pair<int, int>>mp;
void pre(){
A.clear(), mp.clear();
A.resize(n+1);
m=n-1;
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
cin>>n>>q1>>q2;
pre();
int cnt=1;
while(m--){
int u, v;
cin>>u>>v;
if(u>v)
swap(u, v);
A[u].push_back(v);
A[v].push_back(u);
mp[cnt++]={u, v};
}
vector<int>Mnf(n+1), Mxf(n+1);
for(int i=1;i<=n;i++){
Mnf[i]=Mxf[i]=i;
}
set<array<int, 2>>S;
for(int i=1;i<=n;i++){
S.insert({i, i});
}
vector<bool>Active(n);
while(q1--){
int id;
cin>>id;
int u=mp[id].FF, v=mp[id].SS;
int L=u, R=v;
array<int, 2>a={u, inf};
auto it=S.upper_bound(a);
a=*--it;
L=a[0];
a={v, inf};
it=S.upper_bound(a);
a=*--it;
R=a[1];
if(!Active[id]){
Mxf[L]=Mxf[R], Mnf[R]=Mnf[L];
a={u, inf};
it=S.upper_bound(a);
S.erase(--it);
a={v, inf};
it=S.upper_bound(a);
S.erase(--it);
S.insert({L, R});
}
else{
Mnf[u]=Mnf[v]=Mnf[L];
Mxf[u]=Mxf[v]=Mxf[R];
a={L, R};
S.erase(a);
S.insert({L, u});
S.insert({v, R});
}
Active[id]=!Active[id];
}
for(int i=2;i<=n;i++){
Mxf[i]=max(Mxf[i], Mxf[i-1]);
}
for(int i=n-1;i>=1;i--){
Mnf[i]=min(Mnf[i], Mnf[i+1]);
}
while(q2--){
int x;
cin>>x;
cout<<Mxf[x]-Mnf[x]+1<<endl;
}
}
# | 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... |