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
//Mikolaj Tofiluk
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
constexpr int MAXN=500007;
pair<ll,int> tab[MAXN];
ll naj_dla_k[MAXN];
vector<pair<ll,int>> v;
int n;
ll c;
void wczytanie(){
    cin>>n>>c;
    for (int i=0;i<n;i++) cin>>tab[i].first>>tab[i].second;
}
bool porownanie(pair<ll,int> a,pair<ll,int> b){
    if (a.first==b.first) return a.second<b.second;
    return a.first>b.first;
}
ll solve(){
    sort(tab,tab+n,porownanie);
    int k;
    ll naj=0,h,a;
    for (int i=0;i<n;i++){
        a=tab[i].first;k=tab[i].second;h=a;
        h=a+max(naj-c,naj_dla_k[k]);
        v.push_back({h,k});
        if (tab[i].first!=tab[i+1].first){
            for (pair<ll,int> p:v){
                naj=max(naj,p.first);
                naj_dla_k[p.second]=max(naj_dla_k[p.second],p.first);
            }
            v.clear();
        }
    }
    return naj;
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    wczytanie();
    cout<<solve();
}