#include <bits/stdc++.h> using namespace std; const int maxn = 5e5 + 7; long long int n, c, maxx, maxx2, wyn, kol, kon, start, a, w, h; long long int dp[maxn], czy[maxn]; // dp od koloru vector<pair<long long int, long long int>> pary; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> c; for(int i = 0; i < n; i++) { cin >> a >> w; // jaka wysokosc i kolor pary.push_back({a, w}); } pary.push_back({1e5+2, 1e5+2}); maxx = 0; maxx2 = 0; h = 0; for(int i = 0; i < n; i++) { if(pary[i].first != h) { h = pary[i].first; for(int y = i; y <= n; y++) { czy[pary[y].second] = 0; // na poczatku se ustawiamy ze zaden kolor nie odwiedzilismy if(pary[y].first != h) { kon = y-1; break; } } for(int y = i; y <= kon; y++) { kol = pary[y].second; if(czy[kol] == 0) { czy[kol] = 1; dp[kol] = max(dp[kol] + h, maxx + h - c); // albo ostatni z tym samym albo najwiekszy mozliwy inny maxx2 = max(dp[kol], maxx2); } } maxx = max(maxx, maxx2); i = kon; } } cout << maxx; }
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 47 48 49 50 51 52 53 54 55 | #include <bits/stdc++.h> using namespace std; const int maxn = 5e5 + 7; long long int n, c, maxx, maxx2, wyn, kol, kon, start, a, w, h; long long int dp[maxn], czy[maxn]; // dp od koloru vector<pair<long long int, long long int>> pary; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> c; for(int i = 0; i < n; i++) { cin >> a >> w; // jaka wysokosc i kolor pary.push_back({a, w}); } pary.push_back({1e5+2, 1e5+2}); maxx = 0; maxx2 = 0; h = 0; for(int i = 0; i < n; i++) { if(pary[i].first != h) { h = pary[i].first; for(int y = i; y <= n; y++) { czy[pary[y].second] = 0; // na poczatku se ustawiamy ze zaden kolor nie odwiedzilismy if(pary[y].first != h) { kon = y-1; break; } } for(int y = i; y <= kon; y++) { kol = pary[y].second; if(czy[kol] == 0) { czy[kol] = 1; dp[kol] = max(dp[kol] + h, maxx + h - c); // albo ostatni z tym samym albo najwiekszy mozliwy inny maxx2 = max(dp[kol], maxx2); } } maxx = max(maxx, maxx2); i = kon; } } cout << maxx; } |