Submission #217559

#TimeUsernameProblemLanguageResultExecution timeMemory
2175592fat2codeArranging Shoes (IOI19_shoes)C++17
100 / 100
255 ms276476 KiB
#include "shoes.h"
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define all(a) (a).begin(), (a).end()
//#pragma GCC optimize("O3")
//#pragma GCC optimize("Ofast")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define sz() size()
#define fr first
#define sc second
#define pi pair<int,int>
#define pii pair<pair<int,int>,int>
#define mp make_pair
//#define int long long
#define rc(s) return cout<<s,0
#define rcc(s) cout<<s,exit(0)
using namespace std;

const int mod=1e9+7;
const int modp=1999999973;
const int modulo=998244353;

long long ans,aib[200005],n;
vector<long long>arr(200005);
queue<long long>pos[200005];
queue<long long>neg[200005];

void update(long long pos,long long val){
    while(pos<=n){
        aib[pos]+=val;
        pos+=(pos&-pos);
    }
}

long long sum(long long pos){
    long long rs=0;
    while(pos>=1){
        rs+=aib[pos];
        pos-=(pos&-pos);
    }
    return rs;
}

long long count_swaps(std::vector<int> s) {
    ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
    srand(chrono::steady_clock::now().time_since_epoch().count());
    n=s.size();
    long long cnt=-1;
    for(int i=0;i<s.size();i++){
        if(s[i]<0){
            if(pos[-s[i]].size()==0){
                cnt+=2;
                arr[i+1]=cnt;
                neg[-s[i]].push(cnt+1);
            }
            else{
                arr[i+1]=pos[-s[i]].front();
                pos[-s[i]].pop();
            }
        }
        else{
            if(neg[s[i]].size()==0){
                cnt+=2;
                arr[i+1]=cnt+1;
                pos[s[i]].push(cnt);
            }
            else{
                arr[i+1]=neg[s[i]].front();
                neg[s[i]].pop();
            }
        }
    }
    for(int i=n;i>=1;i--){
        ans+=sum(arr[i]-1LL);
        update(arr[i],1LL);
    }
    return ans;
}

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:50:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<s.size();i++){
                 ~^~~~~~~~~
#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...