Submission #1226505

#TimeUsernameProblemLanguageResultExecution timeMemory
1226505_rain_Sparklers (JOI17_sparklers)C++20
100 / 100
12 ms1628 KiB
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=(int)1e6; const long double eps=1e-17; int x[N+2]; int n,k; LL X[N+2]; LL t; bool maximize(LL &x,LL y){ if (x<=y) return x=y,true; return false; } bool minimize(LL &x,LL y){ if (x>=y) return x=y,true; return false; } bool possible(LL s){ if (s==0){ for(int i=2;i<=n;++i) if (x[i]!=x[i-1]) return false; return true; } for(int i=1;i<=n;++i) X[i]=x[i]-s*t*2*i; int l=k,r=k; int gl=k,gr=k; bool nxt=true; while (nxt){ nxt=false; LL mx; int tmp_l=l,best_l=l; mx=X[l]; while (tmp_l>=1 && X[tmp_l]>=X[r]){ if (maximize(mx,X[tmp_l])) best_l=tmp_l; --tmp_l; } if (l!=best_l) { l=best_l; gl=l; nxt=true; } int tmp_r=r,best_r=r; mx=X[r]; while (tmp_r<=n && X[l]>=X[tmp_r]){ if (minimize(mx,X[tmp_r])) best_r=tmp_r; ++tmp_r; } if (best_r!=r){ r=best_r; gr=r; nxt=true; } } l=1,r=n; nxt=true; while (nxt){ nxt=false; LL mx; int tmp_l=l,best_l=l; mx=X[l]; while (tmp_l<=gl && X[tmp_l]>=X[r]){ if (maximize(mx,X[tmp_l])) best_l=tmp_l; ++tmp_l; } if (l!=best_l) { l=best_l; nxt=true; } int tmp_r=r,best_r=r; mx=X[r]; while (tmp_r>=gr && X[l]>=X[tmp_r]){ if (minimize(mx,X[tmp_r])) best_r=tmp_r; --tmp_r; } if (best_r!=r){ r=best_r; nxt=true; } } return l==gl && r==gr; return true; } int main(){ ios::sync_with_stdio(false); cin.tie(0) ; cout.tie(0); #define task "main" if (fopen(task".inp","r")){ freopen(task".inp","r",stdin); freopen(task".out","w",stdout); } cin>>n>>k>>t; for(int i=1;i<=n;++i) cin>>x[i]; int low=0,high=*max_element(x+1,x+n+1),ans=-1; while (low<=high){ int mid=(low+high)/2; if (possible(mid)){ ans=mid; high=mid-1; } else low=mid+1; } cout<<ans; return 0; }

Compilation message (stderr)

sparklers.cpp: In function 'int main()':
sparklers.cpp:95:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   95 |                 freopen(task".inp","r",stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
sparklers.cpp:96:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   96 |                 freopen(task".out","w",stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...