#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
//using namespace __gnu_pbds;
#define LongDepTrai "task"
#define ll long long
#define int long long
#define ull unsigned long long
#define ld long double
#define ii pair<int,int>
#define iii pair<int,ii>
#define iv pair<ii,ii>
#define pll pair<ll,ll>
#define vi vector<int>
#define vii vector<ii>
#define vll vector<ll>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define sz(x) int((x).size())
const int N=7e5+9;
int n,k,a[N],ac[N],bc[N],b[N],t[N],mark[N],node[4*N],beo[4*N],chodo[N*4];
void Update(int i,int l,int r,int pos,int val){
    if(l>pos || r<pos) return;
    if(l==r){
        node[i]=val;
        return;
    }
    Update(i*2,l,(l+r)/2,pos,val);
    Update(i*2+1,(l+r)/2+1,r,pos,val);
    node[i]=max(node[i*2],node[i*2+1]);
}
int Find(int i,int l,int r,int u,int v){
    if(l>v || r<u) return -1;
    if(l<=u && v<=r) return node[i];
    return max(Find(i*2,l,r,u,(u+v)/2),Find(i*2+1,l,r,(u+v)/2+1,v));
}
void Update2(int i,int l,int r,int pos,int val){
    if(l>pos || r<pos) return;
    if(l==r){
        chodo[i]+=val;
        return;
    }
    Update2(i*2,l,(l+r)/2,pos,val);
    Update2(i*2+1,(l+r)/2+1,r,pos,val);
    chodo[i]=chodo[i*2]+chodo[i*2+1];
}
int Find3(int i,int l,int r,int u,int v){
    if(l>v || r<u) return 0;
    if(l<=u && v<=r) return chodo[i];
    return Find3(i*2,l,r,u,(u+v)/2)+Find3(i*2+1,l,r,(u+v)/2+1,v);
}
vi v;
int idx(int val){
    return((lower_bound(v.begin(),v.end(),val)-v.begin())+1);
}
    vii qr;
bool cmp(ii x,ii y){
    return(x.fi>y.fi||(x.fi==y.fi && max(a[x.se],b[x.se])>max(a[y.se],b[y.se])));
}
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    if(fopen(LongDepTrai".inp","r")){
        freopen(LongDepTrai".inp","r",stdin);
        freopen(LongDepTrai".out","w",stdout);
    }
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>a[i]>>b[i];
        v.pb(a[i]);
        v.pb(b[i]);
    }
    for(int i=1;i<=k;i++){
        cin>>t[i];
        v.pb(t[i]);
    }
    sort(v.begin(),v.end());
    v.erase(unique(v.begin(),v.end()),v.end());
    int m=v.size();
    for(int i=1;i<=k;i++){
        Update(1,1,m,idx(t[i]),i);
    }
    for(int i=1;i<=n;i++){
        ac[i]=idx(a[i]);
        bc[i]=idx(b[i]);
    }
    for(int i=1;i<=n;i++){
        int l = ac[i];
        int r = bc[i];
        if(l > r) swap(l, r);
        r--;
        int j = 0;
        if (l <= r) {
            j = Find(1, l, r, 1, m);
            if (j < 0) j = 0;
        } else {
            j = 0;
        }
        if (j && a[i] < b[i]) swap(a[i], b[i]), swap(ac[i], bc[i]);
        qr.pb({j,i});
    }
    int res=0;
    sort(qr.begin(),qr.end(),cmp);
    int j=k;
    for(ii x:qr){
        while (j >= max(x.fi,1ll)) {
            Update2(1,1,m,idx(t[j]),1);
            j--;
        }
        if(x.fi==0){
            int tmp=Find3(1,max(ac[x.se],bc[x.se]),m,1,m);
            if(tmp&1) swap(a[x.se],b[x.se]);
        }
        else
        {
            int tmp=Find3(1,ac[x.se],m,1,m);
            if(tmp&1) swap(a[x.se],b[x.se]);
        }
    }
    for(int i=1;i<=n;i++){
        res+=a[i];
    }
    cout<<res;
    return 0;
}
Compilation message (stderr)
fortune_telling2.cpp: In function 'int main()':
fortune_telling2.cpp:72:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   72 |         freopen(LongDepTrai".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fortune_telling2.cpp:73:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   73 |         freopen(LongDepTrai".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |