fork download
  1. #include<stdio.h>
  2. void mergesort(long long *ar,long long ,long long);
  3. void merge(long long*ar,long long,long long,long long);
  4.  
  5. void mergesort(long long *ar,long long left,long long right)
  6. {
  7. long long mid=((left+right)/2);
  8. if(left<right)
  9. {
  10. mergesort(ar,left,mid);
  11. mergesort(ar,mid+1,right);
  12. merge(ar,left,mid,right);
  13. }
  14. }
  15. void merge(long long*ar,long long left,long long mid,long long right)
  16. {
  17. long long t[right-left+1];
  18. long long pos=0;long long i;
  19. long long lpos=left,rpos=mid+1;
  20. while(lpos<=mid && rpos<=right)
  21. {
  22. if(ar[lpos]<ar[rpos])
  23. {
  24. t[pos++]=ar[lpos++];
  25. }
  26. else
  27. {
  28. t[pos++]=ar[rpos++];
  29. }
  30. }
  31. while(lpos<=mid)
  32. t[pos++]=ar[lpos++];
  33. while(rpos<=right)
  34. t[pos++]=ar[rpos++];
  35. for(i=0;i<pos;i++)
  36. ar[left+i]=t[i];
  37. return ;
  38. }
  39. long long at[50005005];
  40. int main()
  41. {
  42. long long t,n,k1,k2,k3,i,temp,b,j;
  43. long long ar[10005],s[10005];
  44. scanf("%lld",&t);
  45. while(t--)
  46. {
  47. b=0;
  48. scanf("%lld%lld%lld%lld",&n,&k1,&k2,&k3);
  49. for(i=1;i<=n;i++)
  50. scanf("%lld",&ar[i]);
  51. s[1]=ar[1];
  52. at[b++]=s[1];
  53. for(i=2;i<=n;i++)
  54. {
  55. temp=s[i-1]+ar[i];
  56. if(temp>=ar[i])
  57. {
  58. s[i]=temp;
  59. at[b++]=s[i];
  60. }
  61. else
  62. {
  63. s[i]=ar[i];
  64. at[b++]=s[i];
  65. }
  66. for(j=1;j<i;j++)
  67. at[b++]=s[i]-s[j];
  68. }
  69. mergesort(at,0,b-1);
  70. printf("%lld %lld %lld\n",at[b-k1],at[b-k2],at[b-k3]);
  71. }
  72. return 0;
  73. }
Success #stdin #stdout 0s 392768KB
stdin
Standard input is empty
stdout
Standard output is empty