Submission #761104

#TimeUsernameProblemLanguageResultExecution timeMemory
761104raysh07Arranging Shoes (IOI19_shoes)C++17
100 / 100
73 ms72568 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 69;
int f[N];
int m;

void add(int x, int v){
    for (int i = x; i <= m; i += i & (-i)) f[i] += v;
}

int sum(int x){
    int ret = 0;
    for (int i = x; i; i -= i & (-i)) ret += f[i];
    return ret;
}

long long count_swaps(vector<int> s) {
    long long ans = 0;
    
    int n = s.size() / 2;
    m = 2 * n;
    vector <int> match(m + 1, -1);
    deque <int> store[n + 1];
    
    for (int i = 0; i < m; i++){
        int x = abs(s[i]);
        int sgn = s[i] / x;
        
        if (sgn == 1){
            if (store[x].size() > 0 && store[x][0] < 0){
                match[-store[x][0]] = i + 1;
                match[i + 1] = -store[x][0];
                store[x].pop_front();
            } else {
                store[x].push_back(i + 1);
            }
        } else {
            if (store[x].size() > 0 && store[x][0] > 0){
                match[store[x][0]] = i + 1;
                match[i + 1] = store[x][0];
                store[x].pop_front();
            } else {
                store[x].push_back(-i - 1);
            }
        }
    }
    
    for (int i = 1; i <= 2 * n; i++) add(i, 1);
    
    for (int i = 1; i <= 2 * n; i++){
        if (match[i] < i) continue;
        
        int holy;
        
        holy = sum(match[i] - 1) - sum(i);
       // cout << holy << " ";
        if (s[match[i] - 1] < 0) holy++;
       // cout << holy << "\n";
        ans += holy;
        add(match[i], -1);
    }
    
    return ans;
}

// int main(){
//     int n; cin >> n;
//     vector <int> a(n);
//     for (auto &x : a) cin >> x;
    
//     cout << count_swaps(a) << "\n";
//   return 0; 
// }
#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...