Untitled
unknown
c_cpp
a year ago
1.7 kB
2
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...