Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define pb push_back
- #define INF 0x3f3f3f3
- #define LINF 0x3f3f3f3f3f3f3f
- #define MAXN int(200005)
- #define fim '\n'
- #define ll long long
- #define f first
- #define s second
- #define FAST cin.tie(0), cout.tie(0), ios::sync_with_stdio(0)
- #define debug(x) cout << "DEBUG " << x << fim
- #define debug2(x, y) cout << "DEBUG " << x << " " << y << fim
- #define debug3(x, y, z) cout << "DEBUG " << x << " " << y << " " << z<< fim
- #define max3(x, y, z) max(x, max(y, z))
- using namespace std;
- typedef pair<ll, ll> pii;
- typedef pair<string, int> psi;
- typedef pair<ll, pair<int, int> > piii;
- ll vet[MAXN], aux[MAXN], bit[MAXN];
- unsigned ll bit2[MAXN];
- map<ll, int> val;
- int p1, p2, cont = 0;
- int n, k;
- void update(int i, int x) {
- while(i <= n) {
- bit[i] += x;
- i += i&(-i);
- }
- }
- int sum(int i) {
- int soma = 0;
- while(i) {
- soma += bit[i];
- i -= i&(-i);
- }
- return soma;
- }
- void update2(int i, int x) {
- while(i <= n) {
- bit2[i] += x;
- i += i&(-i);
- }
- }
- int sum2(int i) {
- int soma = 0;
- while(i) {
- soma += bit2[i];
- i -= i&(-i);
- }
- return soma;
- }
- int buscab() {
- int sum = 0;
- int pos = 0;
- for(int i=18; i>=0; i--)
- {
- if(pos + (1 << i) < n and sum + bit[pos + (1 << i)] < p1)
- {
- sum += bit[pos + (1 << i)];
- pos += (1 << i);
- }
- }
- return aux[pos + 1];
- }
- int main() {
- FAST;
- cin >> n >> k;
- if(k%2 == 0)
- p1 = k/2;
- else {
- p1 = k/2+1;
- }
- for(int i = 1; i <= n; i++) {
- cin >> vet[i];
- aux[i] = vet[i];
- }
- sort(aux+1, aux+n+1);
- for(int i = 1; i <= n; i++)
- if(val[aux[i]] == 0) val[aux[i]] = i;
- for(int i = 1; i <= k; i++) {
- update(val[vet[i]], 1);
- update2(val[vet[i]], vet[i]);
- }
- ll o = buscab();
- // 1 = qtd; 2 = soma;
- unsigned long long ans = (sum(val[o]-1) * o - sum2(val[o]-1)) + (sum2(n)-sum2(val[o]) - o*(sum(n)-sum(val[o])));
- cout << ans;
- for(int i = k+1; i <= n; i++) {
- update(val[vet[i-k]], -1);
- update(val[vet[i]], 1);
- update2(val[vet[i]], vet[i]);
- update2(val[vet[i-k]], -vet[i-k]);
- o = buscab();
- ans = (sum(val[o]-1) * o - sum2(val[o]-1)) + (sum2(n)-sum2(val[o]) - o*(sum(n)-sum(val[o])));
- cout << " " << ans;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement