Untitled
unknown
c_cpp
2 years ago
1.7 kB
6
Indexable
#include <iostream>
#include <algorithm>
using namespace std;
#define MAXN 200005
int a[MAXN];
struct ticket {
int b;
int c;
int max_c; // 小于等于b的所有ticket中优惠力度最大的。
ticket(): b(0), c(0), max_c(0) {}
ticket(int b, int c): b(b), c(c), max_c(0) {}
bool operator< (const ticket& other) const {
bool res = true;
if (b < other.b) {
res = true;
} else if (b == other.b) {
res = c > other.c;
} else if (b > other.b) {
res = false;
}
return res;
}
};
ticket ts[MAXN];
int main() {
int n = 0, m = 0;
scanf("%d %d", &n, &m);
for (int i=0; i<n; i++) {
scanf("%d", &a[i]);
}
for (int i=0; i<m; i++) {
scanf("%d %d", &ts[i].b, &ts[i].c);
}
sort(ts, ts+m);
int max_c = 0;
for (int i=0; i<m; i++) {
ts[i].max_c = max(max_c, ts[i].c);
if (ts[i].c > max_c) {
max_c = ts[i].c;
}
}
long long res = 0;
for (int i=0; i<n; i++) {
auto iter = lower_bound(ts, ts+m, ticket(a[i], 0),
[](const ticket& val, const ticket& ele) {
return val.b < ele.b;
});
if (iter == ts+m) {
res = res + a[i] - ts[m-1].max_c;
} else if (iter->b == a[i]) {
res = res + a[i] - iter->max_c;
} else {
if (iter == ts) {
res = res + a[i];
} else {
res = res + a[i] - (iter-1)->max_c;
}
}
}
printf("%lld", res);
return 0;
}
Editor is loading...