Submission #420609

#TimeUsernameProblemLanguageResultExecution timeMemory
420609HappyPacManAutobahn (COI21_autobahn)C++14
100 / 100
262 ms12204 KiB
#include <bits/stdc++.h> using namespace std; const int MXN = 1e5 + 5; int N,K,X,l[MXN],t[MXN],r[MXN],prfcnt[10*MXN],prflate[10*MXN]; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> N >> K >> X; vector<int> coor; for(int i=0;i<N;i++){ cin >> l[i] >> t[i] >> r[i]; coor.push_back(l[i]-1); coor.push_back(l[i]); coor.push_back(l[i]+1); coor.push_back(l[i]+t[i]-1); coor.push_back(l[i]+t[i]); coor.push_back(l[i]+t[i]+1); coor.push_back(r[i]-1); coor.push_back(r[i]); coor.push_back(r[i]+1); } sort(coor.begin(),coor.end()); coor.erase(unique(coor.begin(),coor.end()),coor.end()); auto fnidx = [&](int u){ return lower_bound(coor.begin(),coor.end(),u)-coor.begin(); }; for(int i=0;i<N;i++){ prfcnt[fnidx(l[i])]++, prfcnt[fnidx(r[i]+1)]--; if(l[i]+t[i] <= r[i]) prflate[fnidx(l[i]+t[i])]++, prflate[fnidx(r[i]+1)]--; } for(int i=1;i<coor.size();i++){ prfcnt[i] += prfcnt[i-1]; prflate[i] += prflate[i-1]; } // for(int i=0;i<coor.size();i++) cout << prfcnt[i] << ' '; cout << '\n'; // for(int i=0;i<coor.size();i++) cout << prflate[i] << ' '; cout << '\n'; int64_t mx = 0,cost = 0; for(int i=1,j=1;i<coor.size();i++){ if(prfcnt[i] >= K) cost += (coor[i]-coor[i-1]) * 1LL * prflate[i]; while(coor[i]-coor[j] > X){ j++; if(prfcnt[j] >= K) cost -= (coor[j]-coor[j-1]) * 1LL * prflate[j]; } int64_t temp = cost; if(prfcnt[j] >= K) temp += min(coor[j]-coor[j-1],X-(coor[i]-coor[j])) * 1LL * prflate[j]; mx = max(mx,temp); } cost = 0; for(int i=1,j=1;i<coor.size()-1;i++){ if(prfcnt[i] >= K) cost -= (coor[i]-coor[i-1]) * 1LL * prflate[i]; while(j+1 < coor.size() && coor[j+1]-coor[i] <= X){ j++; if(prfcnt[j] >= K) cost += (coor[j]-coor[j-1]) * 1LL * prflate[j]; } int64_t temp = cost; if(prfcnt[j+1] >= K) temp += min(coor[j+1]-coor[j],X-(coor[j]-coor[i])) * 1LL * prflate[j+1]; mx = max(mx,temp); } cout << mx << '\n'; }

Compilation message (stderr)

autobahn.cpp: In function 'int main()':
autobahn.cpp:27:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |     for(int i=1;i<coor.size();i++){
      |                 ~^~~~~~~~~~~~
autobahn.cpp:34:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |     for(int i=1,j=1;i<coor.size();i++){
      |                     ~^~~~~~~~~~~~
autobahn.cpp:45:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |     for(int i=1,j=1;i<coor.size()-1;i++){
      |                     ~^~~~~~~~~~~~~~
autobahn.cpp:47:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |         while(j+1 < coor.size() && coor[j+1]-coor[i] <= X){
      |               ~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...