#include <bits/stdc++.h> using namespace std; typedef long long LL; int main(){ int n, m; scanf("%d %d", &n, &m); LL wys[1000000] = {0}; for (int i = 0; i < n; ++i) scanf("%lld", &wys[i]); sort(wys, wys + n); for(int i = n - 1, j = 2*n -1; i >= 0; --i, j -= 2) swap (wys[i], wys[j]); LL d = 0, di, bi, last = 0; n <<= 1; while (m--){ LL siano = 0; scanf("%lld %lld", &di, &bi); di -= d; if (last + wys[n - 1] * di < bi){ puts("0"); continue; } d += di; int i; for (i = 0; (wys[i] += wys[i+1] * di) < bi; i += 2) ; siano = wys[i] - bi; wys[i] = bi; for (i += 2; i < n; i+=2){ siano += wys[i+1] * di + wys[i] - bi; wys[i] = bi; } last = bi; printf("%lld\n", siano); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <bits/stdc++.h> using namespace std; typedef long long LL; int main(){ int n, m; scanf("%d %d", &n, &m); LL wys[1000000] = {0}; for (int i = 0; i < n; ++i) scanf("%lld", &wys[i]); sort(wys, wys + n); for(int i = n - 1, j = 2*n -1; i >= 0; --i, j -= 2) swap (wys[i], wys[j]); LL d = 0, di, bi, last = 0; n <<= 1; while (m--){ LL siano = 0; scanf("%lld %lld", &di, &bi); di -= d; if (last + wys[n - 1] * di < bi){ puts("0"); continue; } d += di; int i; for (i = 0; (wys[i] += wys[i+1] * di) < bi; i += 2) ; siano = wys[i] - bi; wys[i] = bi; for (i += 2; i < n; i+=2){ siano += wys[i+1] * di + wys[i] - bi; wys[i] = bi; } last = bi; printf("%lld\n", siano); } } |