#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl "\n"
const int N=(1<<20);
int Tree[N*2+5][2];
int a[200005],b[200005],t[200005];
int n,q;
map <int,int> key,vl;
set <int> st;
vector <int> query[400001];
void update1(int i,int val){
i+=N;
Tree[i][0]=max(val,Tree[i][0]);
i/=2;
while(i!=0){
Tree[i][0]=max(Tree[i*2][0],Tree[i*2+1][0]);
i/=2;
}
return;
}
void update2(int i){
i+=N;
Tree[i][1]++;
i/=2;
while(i!=0){
Tree[i][1]=Tree[i*2][1]+Tree[i*2+1][1];
i/=2;
}
return;
}
int solve(int l1,int r1,int i,int u,int l,int r){
if(l1>r||l>r1) return 0;
if(l<=l1&&r1<=r) return Tree[i][u];
int a=solve(l1,(l1+r1)/2,i*2,u,l,r);
int b=solve((l1+r1)/2+1,r1,i*2+1,u,l,r);
if(u==0) return max(a,b);
else return a+b;
}
void compress(){
int idx=1;
for(int i:st){
key[i]=idx;
vl[idx]=i;
idx++;
}
return;
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n>>q;
for(int i=1;i<=n;i++) {
cin>>a[i]>>b[i];
st.insert(a[i]);
st.insert(b[i]);
}
for(int i=1;i<=q;i++){
cin>>t[i];
st.insert(t[i]);
}
compress();
for(int i=1;i<=n;i++) a[i]=key[a[i]];
for(int i=1;i<=n;i++) b[i]=key[b[i]];
for(int i=1;i<=q;i++){
t[i]=key[t[i]];
update1(t[i],i);
}
// for(int i=1;i<=n;i++) cout<<a[i]<<" "<<b[i]<<endl;
// for(int i=1;i<=q;i++) cout<<t[i]<<endl;
//cout<<"input finish -----------"<<endl;
for(int i=1;i<=n;i++){
int idx=solve(0,N-1,1,0,min(a[i],b[i]),max(a[i],b[i])-1);
//cout<<i<<" "<<idx<<endl;
query[idx].push_back(i);
}
int sum=0;
for(int i=q;i>=1;i--){
update2(t[i]);
for(int idx:query[i]){
int val=solve(0,N-1,1,1,max(a[idx],b[idx]),n*2+q+1);
if(val%2==0) sum+=max(vl[a[idx]],vl[b[idx]]);
else sum+=min(vl[a[idx]],vl[b[idx]]);
}
}
for(int idx:query[0]){
int val=solve(0,N-1,1,1,max(a[idx],b[idx]),n*2+q+1);
if(val%2==0) sum+=vl[a[idx]];
else sum+=vl[b[idx]];
//cout<<idx<<" "<<sum<<" "<<max(a[idx],b[idx])<<endl;
}
cout<<sum<<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... |