#include <bits/stdc++.h>
using namespace std;
const int N=500*1000+7;
long long n,c,wyn=0,naj,pom1,pom2,z=0;
pair<long long, int> k[N];
long long w[N];
vector<pair<long long,int> > zmienione;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>c;
for(int i=n;i>0;i--){
cin>>k[i].first>>k[i].second;
}
for(int i=1;i<=n+1;i++){
if(k[i].first!=k[i-1].first){
for(int j=0;j<z;j++){
w[zmienione[j].second] = max(w[zmienione[j].second], zmienione[j].first);
if(w[zmienione[j].second ]>w[naj]){
naj = zmienione[j].second;
}
}
zmienione.clear();
z=0;
}
pom1 = k[i].first + w[k[i].second ];
pom2 = k[i].first + w[naj] - c;
zmienione.push_back(make_pair(max(pom1,pom2),k[i].second));
z++;
}
for(int i=1;i<=N-3;i++){
wyn = max(wyn,w[i]);
//cout<<w[i]<<" ";
}
//cout<<endl;
cout<<wyn;
}
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 | #include <bits/stdc++.h> using namespace std; const int N=500*1000+7; long long n,c,wyn=0,naj,pom1,pom2,z=0; pair<long long, int> k[N]; long long w[N]; vector<pair<long long,int> > zmienione; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>c; for(int i=n;i>0;i--){ cin>>k[i].first>>k[i].second; } for(int i=1;i<=n+1;i++){ if(k[i].first!=k[i-1].first){ for(int j=0;j<z;j++){ w[zmienione[j].second] = max(w[zmienione[j].second], zmienione[j].first); if(w[zmienione[j].second ]>w[naj]){ naj = zmienione[j].second; } } zmienione.clear(); z=0; } pom1 = k[i].first + w[k[i].second ]; pom2 = k[i].first + w[naj] - c; zmienione.push_back(make_pair(max(pom1,pom2),k[i].second)); z++; } for(int i=1;i<=N-3;i++){ wyn = max(wyn,w[i]); //cout<<w[i]<<" "; } //cout<<endl; cout<<wyn; } |
English