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;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n;
    long long c;
    cin >> n >> c;

    vector<long long> h(n);
    vector<int> p(n);
    for(int i = 0; i < n; i++) {
        cin >> h[i] >> p[i];
    }

    vector<int> last_h(5e5 + 1, 0);
    vector<long long> score(5e5 + 1, 0), best(5e5 + 1, 0);

    int k = 0;
    for(long long i = 1; i <= 5e5; i++) {
        best[i] = best[i - 1];
        while(k < n && h[k] == i) {
            int pat = p[k];
            if(last_h[pat] != i) {
                last_h[pat] = i;
                score[pat] = max(score[pat] + i, best[i - 1] + i - c);
                best[i] = max(best[i], score[pat]);
            }

            k++;
        }
    }

    cout << best[5e5];

    return 0;
}