This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define pb push_back
#define int long long
using namespace std;
const int inf = 1e16;
const int N = 1e3 + 5;
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, k, x;
cin>>n>>k>>x;
vector<array<int, 3> > upd;
set<int> vis;
for(int i = 0; i < n; i++){
int l, t, r;
cin>>l>>t>>r;
if(r - l + 1 > t){
upd.pb({l, i, 0});
upd.pb({l+t, i, 1});
upd.pb({r+1, i, 2});
vis.insert(l);
vis.insert(r+1);
vis.insert(l+t);
}
else{
upd.pb({l, i, 0});
upd.pb({r+1, i, 2});
vis.insert(l);
vis.insert(r+1);
}
}
sort(upd.begin(), upd.end());
vector<int> col(n); // 0 yok, 1 iceride, 2 oduyor
vector<array<int, 3> > odeme;
int act = 0, ode = 0, ind = 0;
for(auto i: vis){
while(ind < upd.size() && upd[ind][0] <= i){
if(upd[ind][2] == 0){
act++;
col[upd[ind][1]] = 1;
}
else if(upd[ind][2] == 1){
col[upd[ind][1]] = 2;
ode++;
}
else{
if(col[upd[ind][1]] == 2) ode--;
act--;
col[upd[ind][1]] = 0;
}
ind++;
}
if(act >= k){
odeme.pb({i, upd[ind][0]-1, ode});
}
}
if(!odeme.size()){
cout<<0<<endl;
return 0;
}
int hh = 0, ans = 0;
ind = 0;
for(int i = 0; i < odeme.size(); i++){
int l = odeme[i][0];
while(ind < odeme.size() && odeme[ind][1] <= l + x - 1){
hh += odeme[ind][2] * (odeme[ind][1] - odeme[ind][0] + 1);
ind++;
}
int add = 0;
if(ind < odeme.size() && l + x - 1 >= odeme[ind][0]){
add = odeme[ind][2] * (l + x - 1 - odeme[ind][0] + 1);
}
ans = max(ans, hh + add);
hh -= odeme[i][2] * (odeme[i][1] - odeme[i][0] + 1);
}
ind = odeme.size()-1;
hh = 0;
for(int i = odeme.size()-1; i >= 0; i--){
int r = odeme[i][1];
while(ind >= 0 && odeme[ind][0] >= r - x + 1){
hh += odeme[ind][2] * (odeme[ind][1] - odeme[ind][0] + 1);
ind--;
}
int add = 0;
if(ind >= 0 && r - x + 1 <= odeme[ind][1]){
add = odeme[ind][2] * (odeme[ind][1] - (r - x + 1) + 1);
}
ans = max(ans, hh + add);
hh -= odeme[i][2] * (odeme[i][1] - odeme[i][0] + 1);
}
cout<<ans<<endl;
return 0;
}
Compilation message (stderr)
autobahn.cpp: In function 'int32_t main()':
autobahn.cpp:43:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::array<long long int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
43 | while(ind < upd.size() && upd[ind][0] <= i){
| ~~~~^~~~~~~~~~~~
autobahn.cpp:73:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::array<long long int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
73 | for(int i = 0; i < odeme.size(); i++){
| ~~^~~~~~~~~~~~~~
autobahn.cpp:75:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::array<long long int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
75 | while(ind < odeme.size() && odeme[ind][1] <= l + x - 1){
| ~~~~^~~~~~~~~~~~~~
autobahn.cpp:80:14: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::array<long long int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
80 | if(ind < odeme.size() && l + x - 1 >= odeme[ind][0]){
| ~~~~^~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |