제출 #921970

#제출 시각아이디문제언어결과실행 시간메모리
9219701075508020060209tcCake 3 (JOI19_cake3)C++14
100 / 100
2500 ms38536 KiB
#pragma GCC optimize("O3") //#include "meetings.h" #include<bits/stdc++.h> using namespace std; #define int long long #define X first #define Y second #define SZ(x) (int)(x).size() int K; int ksum; multiset<int>tmst; multiset<int>bmst; void mINS(int v){ tmst.insert(v); ksum+=v; if(tmst.size()>K){ ksum-=*(tmst.begin()); bmst.insert(*tmst.begin()); tmst.erase(tmst.begin()); } } void mDEL(int v){ if(bmst.find(v)!=bmst.end()){ bmst.erase(bmst.find(v)); return; } ksum-=v; tmst.erase(tmst.find(v)); if(tmst.size()<K){ if(bmst.size()){ tmst.insert(*(bmst.rbegin())); ksum+=*bmst.rbegin(); bmst.erase(prev(bmst.end())); } } } int mlit;int mrit; int ans; int n; pair<int,int>ar[200005]; int opt[200005]; vector<pair<int,int>>targ;vector<pair<int,int>>tbrg; void solve(vector<pair<int,int>>aarg,vector<pair<int,int>>brg){ vector<int>apt; for(int i=0;i<aarg.size();i++){ apt.push_back((aarg[i].first+aarg[i].second)/2); targ.push_back({aarg[i].first,apt.back()}); targ.push_back({apt.back()+1,aarg[i].second}); } tmst.clear(); bmst.clear(); ksum=0; int Q=aarg.size(); mlit=n; mrit=n; mINS(ar[n].second); for(int i=Q-1;i>=0;i--){ // cout<<i<<"\n"; int qrpl=apt[i]; int tmx=-1e12; while(mlit>qrpl-K+1){ mINS(ar[--mlit].second); } while(mrit>qrpl){ mDEL(ar[mrit--].second); } while(mlit>=brg[i].first){ int cal=-ar[qrpl].first+ar[mlit].first+ksum; if(cal>=tmx){ opt[i]=mlit; tmx=cal; } ans=max(ans,tmx); if(mlit==brg[i].first){break;} mINS(ar[--mlit].second); } tbrg.push_back({opt[i],brg[i].second}); tbrg.push_back({brg[i].first,opt[i]}); // cout<<"ll"; } reverse(tbrg.begin(),tbrg.end()); } signed main(){ cin>>n>>K; ans=-1e12; for(int i=1;i<=n;i++){ cin>>ar[i].second>>ar[i].first; ar[i].first*=2; } sort(ar+1,ar+n+1); vector<pair<int,int>>vc;vector<pair<int,int>>vc2; vc.push_back({K,n}); vc2.push_back({1,n-K+1}); int yy=18; while(yy--){ solve(vc,vc2); int ok=1; for(int i=0;i<vc.size();i++){ // cout<<vc[i].first<<" "<<vc[i].second<<" "; if(vc[i].first!=vc[i].second){ok=0;} } // cout<<ans<<" "<<ok<<"\n"; if(ok){break;} swap(vc,targ);swap(vc2,tbrg); targ.clear();tbrg.clear(); } //cout<<"hehe"; cout<<ans<<endl; }

컴파일 시 표준 에러 (stderr) 메시지

cake3.cpp: In function 'void mINS(long long int)':
cake3.cpp:16:15: warning: comparison of integer expressions of different signedness: 'std::multiset<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   16 | if(tmst.size()>K){
      |    ~~~~~~~~~~~^~
cake3.cpp: In function 'void mDEL(long long int)':
cake3.cpp:29:15: warning: comparison of integer expressions of different signedness: 'std::multiset<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   29 | if(tmst.size()<K){
      |    ~~~~~~~~~~~^~
cake3.cpp: In function 'void solve(std::vector<std::pair<long long int, long long int> >, std::vector<std::pair<long long int, long long int> >)':
cake3.cpp:48:14: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 | for(int i=0;i<aarg.size();i++){
      |             ~^~~~~~~~~~~~
cake3.cpp: In function 'int main()':
cake3.cpp:111:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  111 |     for(int i=0;i<vc.size();i++){
      |                 ~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...