Submission #898774

#TimeUsernameProblemLanguageResultExecution timeMemory
898774Faisal_Saqib쌀 창고 (IOI11_ricehub)C++17
100 / 100
139 ms4896 KiB
#pragma once #include <iostream> #include <set> #include <vector> using namespace std; vector<long long> vp,pre={0}; long long b; bool check(int r,int i,int mid,int take) { if((r-i)>=(mid-take)) { long long cur=0; long long sum_b=pre[i+1]-pre[i-take+1]; cur+=((take*vp[i])-sum_b); long long sum_f=pre[i+mid-take+1]-pre[i+1]; cur+=(sum_f-((mid-take)*vp[i])); if(cur<=b) { return 1; } } return 0; } int besthub(int r, int l, int x[], long long b1) { b=b1; int ans=0; vp.push_back(-3e15); for(int i=0;i<r;i++) vp.push_back(x[i]); vp.push_back(3e15); for(auto i:vp) pre.push_back(pre.back()+i); for(int i=1;i<=r;i++) { // binary search on cnt int cnt_s=1; int cnt_e=r+1; // cout<<"index "<<i<<endl; while(cnt_s+1<cnt_e) { int mid=(cnt_s+cnt_e)/2; bool pos=0; // cout<<"For "<<mid<<' '; int take_s=0; int take_e=min(mid,i)+1; while(take_s+1<take_e) { int mid1=(take_s+take_e)/2; if((r-i)>=(mid-mid1)) { long long sum_b=pre[i+1]-pre[i-mid1+1]; sum_b=(mid1*vp[i])-sum_b; long long sum_f=(pre[i+mid-mid1+1])-(pre[i+1]); sum_f-=(mid-mid1)*vp[i]; if(sum_b<=sum_f) { take_s=mid1; } else { take_e=mid1; } } else { // We have to take more from the element less than side so increase s to mid take_s=mid1; } } for(int error=-1;error<=1;error++) { if(check(r,i,mid,take_s+error)) { pos=1; break; } } if(pos) { cnt_s=mid; } else { cnt_e=mid; } } // int cnt=1; // long long tm=0; // int l=i-1; // int r=i+1; // while(min(vp[i]-vp[l],vp[r]-vp[i])<=(b-tm)) // { // tm+=min(vp[i]-vp[l],vp[r]-vp[i]); // if((vp[i]-vp[l])==min(vp[i]-vp[l],vp[r]-vp[i])) // { // cnt++; // l--; // } // else // { // cnt++; // r++; // } // } ans=max(ans,cnt_s); } return ans; }

Compilation message (stderr)

ricehub.cpp:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...