实话实说,给 OIER 大神们排队这种工作是最让人头疼的事情了。因为同学们都有自尊 心,都不愿意排后面。 现在共有 n 个同学要排成一列,每个同学有两个属性:影响力和承受能力。给一个同学 造成的心理创伤指数等于所有在他前面同学的影响力之和减去他的承受能力。 请你帮忙安排一下点名顺序,尽量使受到心理创伤最大的同学少受创伤。
1≤n≤50000,1≤影响力≤10000,1≤承受能力≤10^9
#include <bits/stdc++.h> using namespace std; const int N = 5e4; int n,a[N+10],b[N+10]; pair <int, int> c[N + 10]; int main() { // freopen("F:\\rush.txt", "r", stdin); ios::sync_with_stdio(0), cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i] >> b[i]; c[i].first = a[i] + b[i], c[i].second = i; } sort(c + 1, c + 1 + n); int ans = 0 - b[c[1].second],temp = 0; for (int i = 2; i <= n; i++) { temp += a[c[i - 1].second]; ans = max(ans, temp - b[c[i].second]); } cout << ans << endl; return 0; }