Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.18 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define pb push_back
  3. #define INF 0x3f3f3f3
  4. #define LINF 0x3f3f3f3f3f3f3f
  5. #define MAXN int(200005)
  6. #define fim '\n'
  7. #define ll long long
  8. #define f first
  9. #define s second
  10. #define FAST cin.tie(0), cout.tie(0), ios::sync_with_stdio(0)
  11. #define debug(x) cout << "DEBUG " << x << fim
  12. #define debug2(x, y) cout << "DEBUG " << x << " " << y << fim
  13. #define debug3(x, y, z) cout << "DEBUG " << x << " " << y << " " << z<< fim
  14. #define max3(x, y, z) max(x, max(y, z))
  15. using namespace std;
  16. typedef pair<ll, ll> pii;
  17. typedef pair<string, int> psi;
  18. typedef pair<ll, pair<int, int> > piii;
  19.  
  20. ll vet[MAXN], aux[MAXN], bit[MAXN];
  21. unsigned ll bit2[MAXN];
  22. map<ll, int> val;
  23. int p1, p2, cont = 0;
  24. int n, k;
  25.  
  26. void update(int i, int x) {
  27.     while(i <= n) {
  28.         bit[i] += x;
  29.         i += i&(-i);
  30.     }
  31. }
  32.  
  33. int sum(int i) {
  34.     int soma = 0;
  35.     while(i) {
  36.         soma += bit[i];
  37.         i -= i&(-i);
  38.     }
  39.     return soma;
  40. }
  41.  
  42. void update2(int i, int x) {
  43.     while(i <= n) {
  44.         bit2[i] += x;
  45.         i += i&(-i);
  46.     }
  47. }
  48.  
  49. int sum2(int i) {
  50.     int soma = 0;
  51.     while(i) {
  52.         soma += bit2[i];
  53.         i -= i&(-i);
  54.     }
  55.     return soma;
  56. }
  57.  
  58. int buscab() {
  59.     int sum = 0;
  60.     int pos = 0;
  61.  
  62.     for(int i=18; i>=0; i--)
  63.     {
  64.         if(pos + (1 << i) < n and sum + bit[pos + (1 << i)] < p1)
  65.         {
  66.             sum += bit[pos + (1 << i)];
  67.             pos += (1 << i);
  68.         }
  69.     }
  70.  
  71.     return aux[pos + 1];
  72. }
  73.  
  74. int main() {
  75.     FAST;
  76.     cin >> n >> k;
  77.     if(k%2 == 0)
  78.         p1 = k/2;
  79.     else {
  80.         p1 = k/2+1;
  81.     }
  82.     for(int i = 1; i <= n; i++) {
  83.         cin >> vet[i];
  84.         aux[i] = vet[i];
  85.     }
  86.     sort(aux+1, aux+n+1);
  87.     for(int i = 1; i <= n; i++)
  88.         if(val[aux[i]] == 0) val[aux[i]] = i;
  89.  
  90.  
  91.     for(int i = 1; i <= k; i++) {
  92.         update(val[vet[i]], 1);
  93.         update2(val[vet[i]], vet[i]);
  94.     }
  95.     ll o = buscab();
  96.     // 1 = qtd; 2 = soma;
  97.     unsigned long long ans = (sum(val[o]-1) * o - sum2(val[o]-1)) + (sum2(n)-sum2(val[o]) - o*(sum(n)-sum(val[o])));
  98.     cout << ans;
  99.     for(int i = k+1; i <= n; i++) {
  100.         update(val[vet[i-k]], -1);
  101.         update(val[vet[i]], 1);
  102.         update2(val[vet[i]], vet[i]);
  103.         update2(val[vet[i-k]], -vet[i-k]);
  104.         o = buscab();
  105.         ans = (sum(val[o]-1) * o - sum2(val[o]-1)) + (sum2(n)-sum2(val[o]) - o*(sum(n)-sum(val[o])));
  106.         cout << " " << ans;
  107.     }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement