#include <bits/stdc++.h>
using namespace std;
struct Klocek {
int rozmiar, kolor;
};
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
//istringstream input("4 5\n1 1\n3 2\n4 3\n4 1");
//cin.rdbuf(input.rdbuf());
int n, c;
cin >> n >> c;
vector<Klocek> klocki(n);
for (int i = 0; i < n; i++) {
int rozmiar, kolor;
cin >> rozmiar >> kolor;
klocki[i] = { rozmiar, kolor };
}
vector<long long> dp(n, 0);
long long OCENA = 0;
deque<int> dq;
for (int i = 0; i < n; i++) {
while (!dq.empty() && klocki[dq.front()].rozmiar >= klocki[i].rozmiar) {
dq.pop_front();
}
if (!dq.empty()) {
int j = dq.front();
dp[i] = dp[j] + klocki[i].rozmiar;
if (klocki[j].kolor != klocki[i].kolor) {
dp[i] -= c;
}
} else {
dp[i] = klocki[i].rozmiar;
}
while (!dq.empty() && dp[dq.back()] <= dp[i]) {
dq.pop_back();
}
dq.push_back(i);
OCENA = max(OCENA, dp[i]);
}
cout << OCENA << '\n';
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 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <bits/stdc++.h> using namespace std; struct Klocek { int rozmiar, kolor; }; int main() { ios::sync_with_stdio(false); cin.tie(0); //istringstream input("4 5\n1 1\n3 2\n4 3\n4 1"); //cin.rdbuf(input.rdbuf()); int n, c; cin >> n >> c; vector<Klocek> klocki(n); for (int i = 0; i < n; i++) { int rozmiar, kolor; cin >> rozmiar >> kolor; klocki[i] = { rozmiar, kolor }; } vector<long long> dp(n, 0); long long OCENA = 0; deque<int> dq; for (int i = 0; i < n; i++) { while (!dq.empty() && klocki[dq.front()].rozmiar >= klocki[i].rozmiar) { dq.pop_front(); } if (!dq.empty()) { int j = dq.front(); dp[i] = dp[j] + klocki[i].rozmiar; if (klocki[j].kolor != klocki[i].kolor) { dp[i] -= c; } } else { dp[i] = klocki[i].rozmiar; } while (!dq.empty() && dp[dq.back()] <= dp[i]) { dq.pop_back(); } dq.push_back(i); OCENA = max(OCENA, dp[i]); } cout << OCENA << '\n'; return 0; } |
English