Advertisement
YEZAELP

PROG-1110: มัธยฐาน (Median)

Jul 15th, 2021
1,083
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.88 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int N = 1e6 + 10;
  5. const int INF = 1e9;
  6. using lli = long long;
  7. unordered_map < int , int > LeftOdd, LeftEven;
  8. int ar[N], qs[N];
  9. int n;
  10.  
  11. int main(){
  12.  
  13.     int med;
  14.     scanf("%d%d", &n, &med);
  15.  
  16.     int cur = -1;
  17.     for(int i=1;i<=n;i++){
  18.         scanf("%d", &ar[i]);
  19.         if(ar[i] == med) cur = i;
  20.         else if(ar[i] < med) qs[i] = -1;
  21.         else qs[i] = 1;
  22.     }
  23.  
  24.     for(int i=cur-1;i>=1;i--)
  25.         qs[i] += qs[i+1];
  26.     for(int i=cur+1;i<=n;i++)
  27.         qs[i] += qs[i-1];
  28.  
  29.     for(int i=1;i<=cur;i++){
  30.         if(i % 2 == 1) LeftOdd[ qs[i] ] ++;
  31.         else LeftEven[ qs[i] ] ++;
  32.     }
  33.  
  34.     /// query
  35.     lli cnt = 0;
  36.     for(int i=cur;i<=n;i++){
  37.         if(i % 2 == 1) cnt += (lli) LeftOdd[ -qs[i] ];
  38.         else cnt += (lli) LeftEven[ -qs[i] ];
  39.     }
  40.  
  41.     printf("%lld", cnt);
  42.  
  43.     return 0;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement