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
#include <bits/stdc++.h>
using namespace std;
#define ll long long

ll dp[500002];
array<ll,2> wej[500002];

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

    ll n,c;
    cin >> n >> c;
    for (ll i = 1; i<=n; i++)cin >> wej[i][0] >> wej[i][1];
    ll iter = n;
    ll mx=0;
    while(iter>0){
        ll A = wej[iter][0];
        set<ll> to_update;
        while(iter>0 && wej[iter][0]==A)to_update.insert(wej[iter--][1]);
        ll tmp=mx;
        for (auto u : to_update){
            dp[u]=max(dp[u]+A,tmp+A-c);
            mx=max(mx,dp[u]);
        }
    }
    cout << mx << '\n';
}