fork(2) download
  1. #include <iostream>
  2. #include <string.h>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. void quicksort(int *arr, int start, int end){
  8. if(start >= end)
  9. return;
  10.  
  11. int pivot = start;
  12. int i = start + 1;
  13. int j = end;
  14.  
  15. while(i <= j){
  16. while(i <= end && arr[i] <= arr[pivot])
  17. i++;
  18. while(j > start && arr[j] >= arr[pivot])
  19. j--;
  20.  
  21. if(i > j){
  22. int temp = arr[j];
  23. arr[j] = arr[pivot];
  24. arr[pivot] = temp;
  25. }
  26. else{
  27. int temp = arr[i];
  28. arr[i] = arr[j];
  29. arr[j] = temp;
  30. }
  31. }
  32.  
  33. quicksort(arr, start + 1, j);
  34. quicksort(arr, j + 1, end);
  35. }
  36. int main(){
  37. int N;
  38. scanf("%d", &N);
  39.  
  40. int *data = new int[N];
  41. int count[8001];
  42. memset(count, 0, sizeof(count));
  43.  
  44. int average = 0;
  45.  
  46. int max = -4000;
  47.  
  48. for(int i = 0;i < N;i++){
  49. scanf("%d", &data[i]);
  50. count[data[i] + 4000]++;
  51. average += data[i];
  52. if(count[data[i] + 4000] >= max){
  53. max = count[data[i] + 4000];
  54. }
  55. }
  56. int min = data[0];
  57. int second_min = min;
  58.  
  59. for(int i = 0;i < 8001;i++){
  60. if(count[i] == max){
  61. if((i - 4000) < min){
  62. second_min = min;
  63. min = (i - 4000);
  64. }
  65. else if((min > (i - 4000) && second_min > (i - 4000)) || min == second_min){
  66. second_min = (i - 4000);
  67. }
  68. }
  69. }
  70.  
  71. average = round((double)average / (double)N);
  72. quicksort(data, 0, N-1);
  73.  
  74. printf("%d\n%d\n%d\n%d\n", average, data[N/2], second_min, data[N-1] - data[0]);
  75.  
  76. delete []data;
  77.  
  78. return 0;
  79. }
Success #stdin #stdout 0s 15232KB
stdin
5
4000
-4000
4000
-4000
2
stdout
0
-4000
4000
3998