fork download
  1. #include <cstdio>
  2. #include <algorithm>
  3. using namespace std;
  4. long long n;
  5. long long data[200000];
  6. long long next(long long val){
  7. long long t=upper_bound(data,data+n,val)-data;
  8. if(t==n)return data[t-1]+1;
  9. return data[t];
  10. }
  11. bool check(long long t){
  12. if(next(2*t+next(2*t+next(2*t+data[0])))==data[n-1]+1){
  13. return true;
  14. }
  15. return false;
  16. }
  17. long long lowerbound(long long s,long long e){
  18. long long lb=s-1,ub=e;
  19. while(ub-lb>1){
  20. long long mid=(ub+lb)/2;
  21. if(check(mid)){
  22. ub=mid;
  23. }else{
  24. lb=mid;
  25. }
  26. }
  27. return ub;
  28. }
  29. void putval(long long t){
  30. if(t==0)printf("%I64d",t);
  31. else printf("%.1lf00000",t*.5);
  32. }
  33. int main(){
  34. scanf("%I64d",&n);
  35. for(long long i=0;i<n;i++){
  36. scanf("%I64d",&data[i]);
  37. data[i]*=2;
  38. }
  39. std::sort(data,data+n);
  40. long long res=lowerbound(0,1000000000*2);
  41. putval(res);putchar('\n');
  42. long long k=data[0];
  43. for(long long i=0;i<3;i++){
  44. putval(k+res);k=next(k+2*res);putchar(' ');
  45. }
  46. puts("");
  47. return 0;
  48. }
  49.  
stdin
5
10003 10004 10001 10002 1
compilation info
prog.cpp: In function ‘void putval(long long int)’:
prog.cpp:30: warning: format ‘%I64d’ expects type ‘int’, but argument 2 has type ‘long long int’
prog.cpp: In function ‘int main()’:
prog.cpp:34: warning: format ‘%I64d’ expects type ‘int*’, but argument 2 has type ‘long long int*’
prog.cpp:36: warning: format ‘%I64d’ expects type ‘int*’, but argument 2 has type ‘long long int*’
prog.cpp:34: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
prog.cpp:36: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
stdout
0.500000
1.500000 10001.500000 10003.500000