Submission #667825

#TimeUsernameProblemLanguageResultExecution timeMemory
667825coding_snorlaxArranging Shoes (IOI19_shoes)C++14
100 / 100
237 ms274908 KiB
#include<bits/stdc++.h>
#include "shoes.h"
using namespace std;
int N=200050;
long long int check_List[400050];
long long int BIT[400050]={0};
deque<int> positive[200060];
deque<int> negative[200060];
int List1[200006]={0};
void pre(vector<int> List){
    for(int i=0;i<(int)List.size();i++){
        if(List[i]>0){
            if((int)negative[List[i]].size()>0){
                List1[negative[List[i]].front()]=i;
                negative[List[i]].pop_front();
            }
            else{
                positive[List[i]].push_back(i);
            }
        }
        if(List[i]<0){
            if((int)positive[-List[i]].size()>0){
                List1[positive[-List[i]].front()]=i;
                positive[-List[i]].pop_front();
            }
            else{
                negative[-List[i]].push_back(i);
            }
        }
    }
    return;
}
void modify(int node,int num){
    for(int i=node;i<=N;i+=i&(-i)){
        BIT[i]+=num;
    }
}
long long int query(int node){
    long long int answer=0;
    for(int i=node;i>=1;i-=i&(-i)){
        answer+=BIT[i];
    }
    return answer;
}
long long int count_swaps(vector<int> s){
    pre(s);
    for(int i=1;i<=(int)s.size()+2;i++){
        modify(i,1);
    }
    long long int Count_answer=0;
    for(int i=0;i<(int)s.size();i++){
        if(List1[i]!=0){
            if(s[i]>0) Count_answer+=1;
            Count_answer+=query(List1[i]+1)-query(i+1)-1;
            modify(i+1,1);
            modify(List1[i]+2,-1);
        }
    }
    return Count_answer;
}
#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...