Submission #991365

#TimeUsernameProblemLanguageResultExecution timeMemory
991365MarwenElarbiArranging Shoes (IOI19_shoes)C++17
100 / 100
456 ms149460 KiB
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define ll long long
#define pb push_back
const int nax=200005;
int segtree[4*nax];
void update(int pos,int l,int r,int left,int right){
    if(l>r||l>right||r<left) return;
    if(l>=left&&r<=right){
        segtree[pos]++;
        return;
    }
    int mid=(r+l)/2;
    update(pos*2+1,l,mid,left,right);
    update(pos*2+2,mid+1,r,left,right);
    return;
}
int query(int pos,int l,int r,int idx){
    if(l==r) return segtree[pos];
    int mid=(r+l)/2;
    if(idx<= mid) return segtree[pos]+query(pos*2+1,l,mid,idx);
    else return segtree[pos]+query(pos*2+2,mid+1,r,idx);
}
long long count_swaps(std::vector<int> s) {
    int n=s.size();
    map<int,queue<int>> mp;
    bool vis[n];
    memset(vis,0,sizeof vis);
    for (int i = 0; i < n; ++i)
    {
        mp[s[i]].push(i);
    }
    long long ans=0;
    int cur=0;
    for (int i = 0; i < n; ++i)
    {
        if(vis[i]) continue;
        auto u=mp[-s[i]].front();
        mp[-s[i]].pop();
        mp[s[i]].pop();
        vis[i]=vis[u]=true;
        int x=query(0,0,n-1,i);
        int y=query(0,0,n-1,u);
        if(s[i]<=0&&u+y==i+x+1){
            continue;
        }
        //cout <<x+i<<" "<<y+u<<endl;
        ans+=(y+u-x-i-1)+(s[i]>0);
        update(0,0,n-1,i,u);
        //cout <<ans<<endl;
    }
    return ans;
}

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:36:9: warning: unused variable 'cur' [-Wunused-variable]
   36 |     int cur=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...