#include <cstdio> #include <map> struct P { long long val; int last_a; }; int main() { int c, n, * w; std::map<int, P> m; long long* a; scanf("%d %d", &n, &c); a = new long long[n]; w = new int[n]; for (int i = 0; i < n; i++) { scanf("%lld %d", a + i, w + i); } { int aakt = a[0]; long long h1=0, h2=0; for (int i = 0; i < n; i++) { if (aakt != a[i]) { aakt = a[i]; h1 = h2; } if (m[w[i]].last_a == aakt) { continue; } long long x = m[w[i]].val + a[i]; long long y = h1 + a[i] - c; long long z = x < y ? y : x; m[w[i]].val = z; m[w[i]].last_a = aakt; if (z > h2) { h2 = z; } } printf("%lld", h2); } return 0; }
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <cstdio> #include <map> struct P { long long val; int last_a; }; int main() { int c, n, * w; std::map<int, P> m; long long* a; scanf("%d %d", &n, &c); a = new long long[n]; w = new int[n]; for (int i = 0; i < n; i++) { scanf("%lld %d", a + i, w + i); } { int aakt = a[0]; long long h1=0, h2=0; for (int i = 0; i < n; i++) { if (aakt != a[i]) { aakt = a[i]; h1 = h2; } if (m[w[i]].last_a == aakt) { continue; } long long x = m[w[i]].val + a[i]; long long y = h1 + a[i] - c; long long z = x < y ? y : x; m[w[i]].val = z; m[w[i]].last_a = aakt; if (z > h2) { h2 = z; } } printf("%lld", h2); } return 0; } |