제출 #1356584

#제출 시각아이디문제언어결과실행 시간메모리
1356584nathako9nArranging Shoes (IOI19_shoes)C++20
100 / 100
67 ms19116 KiB
#include <bits/stdc++.h>
#define endl '\n'
#define ll long long
using namespace std;
const int N = 200005;
vector<int>lef[N+2],rig[N+3];
int pr[N+3],tr[N+3];
int n;
void up(int i,int x){
    for(;i<=n;i+=i&-i)tr[i]+=x;
}
int que(int i){
    int sum=0;
    for(;i>=1;i-=i&-i)sum+=tr[i];
    return sum;
}
long long count_swaps(std::vector<int> s){
     n=s.size();
    set<int>st;
    for(int i=1;i<=n;i++){
        int x=s[i-1];
        if(x<0){
            lef[-x].emplace_back(i);
        }
        else{
            rig[x].emplace_back(i);
            st.insert(x);
        }
        up(i,1);
    }
    for(auto x:st){
        for(int i=0;i<lef[x].size();i++){
            pr[lef[x][i]]=rig[x][i];
            pr[rig[x][i]]=lef[x][i];
        }
    }
    ll ans=0;
    for(int i=1;i<=n;i++){
        int alive=que(i)-que(i-1);
        if(!alive)continue;
        int bet=que(pr[i]-1)-que(i);
        if(s[pr[i]-1]<0)++bet;
        up(pr[i],-1);
        ans+=bet;
        //cout<<i<<" "<<pr[i]<<" "<<que(pr[i]-1)-que(i)<<" "<<bet<<endl;
    }
    return ans;
}

//int main(){
//    ios_base::sync_with_stdio(0);
//    cin.tie(0);
//    cout<<count_swaps({-2, 2, 2, -2, -2, 2});
//    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...