//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();
}
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(); } |
English