#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define endl '\n'
const int N=2e5+5,MOD=1e9+7,inf=1e18;
int seg[N*4][2],offset=1;
void update(int idx,int val,int type){
idx+=offset;
if(!type)seg[idx][type]=max(seg[idx][type],val);
else seg[idx][type]+=val;
idx/=2;
while(idx>0){
if(type)seg[idx][type]=seg[idx*2][type]+seg[idx*2+1][type];
else seg[idx][type]=max(seg[idx*2][type],seg[idx*2+1][type]);
idx/=2;
}
}
int query(int node,int qlo,int qhi,int lo,int hi,int type){
if(lo>=qlo && hi<=qhi)return seg[node][type];
if(lo>qhi || hi<qlo){
if(type)return 0;
return -inf;
}
int mid=(lo+hi)/2;
int x=query(node*2,qlo,qhi,lo,mid,type);
int y=query(node*2+1,qlo,qhi,mid+1,hi,type);
if(type)return x+y;
return max(x,y);
}
signed main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
for(int i=0;i<N*4;i++)seg[i][0]=-inf;
int n,k; cin>>n>>k;
int a[n],b[n],t[k];
set<int> s;
for(int i=0;i<n;i++){
cin>>a[i]>>b[i];
s.insert(a[i]); s.insert(b[i]);
}
for(int i=0;i<k;i++){
cin>>t[i];
s.insert(t[i]);
}
unordered_map<int,int> mp,og;
int cnt=0;
for(auto i:s){
og[cnt]=i;
mp[i]=cnt++;
}
while(offset<N)offset*=2;
vector<pair<int,int>> v;
for(int i=0;i<n;i++){
a[i]=mp[a[i]];
b[i]=mp[b[i]];
v.pb({max(a[i],b[i]),i});
}
vector<pair<int,int>> vec;
for(int i=0;i<k;i++){
t[i]=mp[t[i]];
vec.pb({t[i],i});
update(i,1,1);
}
sort(vec.begin(),vec.end());
sort(v.begin(),v.end());
int l=0,ans=0;
for(auto i:vec){
while(l<v.size() && (i==vec.back() || v[l].first<=i.first)){
// cout<<"hi";
int ca=a[v[l].second],cb=b[v[l].second];
if(ca==cb){
ans+=og[ca];
l++;
continue;
}
// cout<<"bashanigga";
int idx=query(1,min(cb,ca),max(ca,cb)-1,0,offset-1,0);
if(idx==-inf){
if(query(1,0,offset-1,0,offset-1,1)%2)ans+=og[cb];
else ans+=og[ca];
l++;
continue;
}
// cout<<idx<<endl;
int x=query(1,0,idx,0,offset-1,1),y=query(1,idx,offset-1,0,offset-1,1);
if(ca<cb){
if(x%2)y+=x;
else y+=x+1;
}
else{
if(x%2)y+=x+1;
else y+=x;
}
if(y%2)ans+=og[cb];
else ans+=og[ca];
l++;
}
update(i.first,i.second,0);
update(i.second,-1,1);
}
cout<<ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |