#include<bits/stdc++.h>
using namespace std;
long long c,n,a,b;
long long wymiary[500001];
long long wzory[500001];
vector<pair<long long,long long>> ostatniwzor[500001];
long long lastMaxIndex=0;
long long result[500001];
int main()
{
ios_base::sync_with_stdio(0);
cin>>n>>c;
for(long long i=n;i>0;i--)
{
cin>>wymiary[i]>>wzory[i];
ostatniwzor[wzory[i]].push_back(make_pair(0,1000000));
}
long long lastMaxIndexCandidate = 0;
for(long long i=1;i<=n;i++)
{
if(wymiary[i]!=wymiary[i-1])
{
lastMaxIndex=lastMaxIndexCandidate;
}
long long wynikDlaOstatniegoTakiegoSamegoWzoru = ostatniwzor[wzory[i]].back().second == wymiary[i]
? result[ostatniwzor[wzory[i]][ostatniwzor[wzory[i]].size()-2].first]
: result[ostatniwzor[wzory[i]].back().first];
result[i]=wymiary[i] + max(result[lastMaxIndex]-c, wynikDlaOstatniegoTakiegoSamegoWzoru);
if(ostatniwzor[wzory[i]].back().second != wymiary[i])
{
ostatniwzor[wzory[i]].push_back(make_pair(i,wymiary[i]));
}
if(result[i]>result[lastMaxIndexCandidate])
{
lastMaxIndexCandidate=i;
}
// cerr<<result[i]<<" ";
}
// cerr<<endl;
cout<<result[lastMaxIndexCandidate]<<endl;
return 0;
}
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 | #include<bits/stdc++.h> using namespace std; long long c,n,a,b; long long wymiary[500001]; long long wzory[500001]; vector<pair<long long,long long>> ostatniwzor[500001]; long long lastMaxIndex=0; long long result[500001]; int main() { ios_base::sync_with_stdio(0); cin>>n>>c; for(long long i=n;i>0;i--) { cin>>wymiary[i]>>wzory[i]; ostatniwzor[wzory[i]].push_back(make_pair(0,1000000)); } long long lastMaxIndexCandidate = 0; for(long long i=1;i<=n;i++) { if(wymiary[i]!=wymiary[i-1]) { lastMaxIndex=lastMaxIndexCandidate; } long long wynikDlaOstatniegoTakiegoSamegoWzoru = ostatniwzor[wzory[i]].back().second == wymiary[i] ? result[ostatniwzor[wzory[i]][ostatniwzor[wzory[i]].size()-2].first] : result[ostatniwzor[wzory[i]].back().first]; result[i]=wymiary[i] + max(result[lastMaxIndex]-c, wynikDlaOstatniegoTakiegoSamegoWzoru); if(ostatniwzor[wzory[i]].back().second != wymiary[i]) { ostatniwzor[wzory[i]].push_back(make_pair(i,wymiary[i])); } if(result[i]>result[lastMaxIndexCandidate]) { lastMaxIndexCandidate=i; } // cerr<<result[i]<<" "; } // cerr<<endl; cout<<result[lastMaxIndexCandidate]<<endl; return 0; } |
English