Advertisement
coloriot

HA48

Apr 5th, 2025
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <unordered_map>
  4. using namespace std;
  5.  
  6. void solve() {
  7.     ios::sync_with_stdio(false);
  8.     cin.tie(nullptr);
  9.    
  10.     int N, B;
  11.     cin >> N >> B;
  12.     vector<int> A(N);
  13.     int pos = -1;
  14.     for (int i = 0; i < N; i++) {
  15.         cin >> A[i];
  16.         if (A[i] == B)
  17.             pos = i;
  18.     }
  19.    
  20.     // Преобразуем массив:
  21.     // если A[i] < B -> -1
  22.     // если A[i] > B -> +1
  23.     // если A[i] == B -> 0.
  24.     vector<int> T(N);
  25.     for (int i = 0; i < N; i++) {
  26.         if (A[i] < B)
  27.             T[i] = -1;
  28.         else if (A[i] > B)
  29.             T[i] = 1;
  30.         else
  31.             T[i] = 0;
  32.     }
  33.    
  34.     // Вычисляем префиксные суммы:
  35.     // prefix[0] = 0, prefix[i+1] = prefix[i] + T[i].
  36.     vector<long long> prefix(N + 1, 0);
  37.     for (int i = 0; i < N; i++) {
  38.         prefix[i + 1] = prefix[i] + T[i];
  39.     }
  40.    
  41.     // Заметим, что подотрезок [l, r] (включительно) содержит B, если l <= pos <= r.
  42.     // Для такого подотрезка медиана равна B тогда и только тогда,
  43.     // когда сумма его элементов равна 0, то есть:
  44.     // prefix[r+1] - prefix[l] == 0  <=>  prefix[r+1] == prefix[l].
  45.     // Посчитаем для всех l из [0, pos] частоты значений prefix[l],
  46.     // а затем для каждого j из [pos+1, N] прибавим количество prefix[j] из левой части.
  47.    
  48.     unordered_map<long long, long long> freq;
  49.     for (int i = 0; i <= pos; i++) {
  50.         freq[prefix[i]]++;
  51.     }
  52.    
  53.     long long ans = 0;
  54.     for (int j = pos + 1; j <= N; j++) {
  55.         ans += freq[prefix[j]];
  56.     }
  57.    
  58.     cout << ans << "\n";
  59. }
  60.  
  61. int main() {
  62.     solve();
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement