Submission #292325

#TimeUsernameProblemLanguageResultExecution timeMemory
292325Ruba_KArranging Shoes (IOI19_shoes)C++14
0 / 100
258 ms273272 KiB
#include "shoes.h"
#include<bits/stdc++.h>
using namespace std ;
#define ll long long
const int N = 2e5 + 2 ;
 
deque<int>pos[N];
 
struct BIT {
    vector<ll> v;
    int sz;
 
    explicit BIT(int n) {
        v.resize(n + 1);
        sz = n + 1;
    }
 
    //gets sum of range [0, i]
    ll get(int i) {
        ll ret = 0;
        for (++i; i; i -= i & -i)
            ret += v[i ];
        return ret;
    }
 
    void update(int i, ll x) {
        for (++i; i <= sz; i += i & -i)
            v[i ] += x;
    }
 
    ll query(int st, int en) {
        return get(en) - get(st - 1);
    }
};
 
int finish[N * 4];
long long count_swaps(vector<int> v) {
     int n = v.size() / 2;
 
     for(int i = 0 ; i < n  * 2; i ++){
        pos[n + v[i]].push_back(i);
     }
 
     long long ans = 0 ;
 
    BIT bit (n * 2);
     for(int i = 0 ;i < n * 2 ; i ++ ){
        if(finish[i])continue ;
        int ab = -v[i] , p = pos[ab + n].front();
        finish[p]++;
        pos[ab + n].pop_front();
 
        pos[v[i] + n].pop_front();
 
        int betwen = bit.query(i + 1 , p + 1);
 
        ans += p - i - 1 - betwen  + (v[i] > 0 ? 1 : 0);
 
 
        bit.update(p + 1 , 1 );
 
     }
 
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...