#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define pb push_back
#define ff first
#define ss second
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int q, n; cin>>q>>n;
vector<int> a(q + 1), b(q + 1);
for (int i = 1; i <= q; i++){
cin>>a[i]>>b[i];
}
vector<int> x(n + 1);
for (int i = 1; i <= n; i++){
cin>>x[i];
}
auto get = [&](int l, int r){
int out = 0;
for (int i = l; i <= r; i++){
out = max(out, x[i]);
}
return out;
};
ll ans = 0;
for (int i = 1; i <= q; i++){
if (a[i] <= b[i]){
vector<int> p = {0};
int out = 0;
for (int j = 1; j <= n; j++){
if (b[i] <= x[j]){
out++;
p.pb(j);
}
}
p.pb(n + 1);
for (int j = 0; j + 1 < p.size(); j++){
int l = p[j] + 1, r = p[j + 1] - 1;
out += (get(l, r) >= a[i]);
}
ans += (out % 2) ? b[i] : a[i];
}
else {
vector<int> p;
int out = 0;
for (int j = 1; j <= n; j++){
if (a[i] <= x[j]){
out++;
p.pb(j);
}
}
p.pb(n + 1);
for (int j = 0; j + 1 < p.size(); j++){
int l = p[j] + 1, r = p[j + 1] - 1;
out += (get(l, r) >= b[i]);
}
ans += (out % 2) ? b[i] : a[i];
}
}
cout<<ans<<"\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |