This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define F first
#define S second
#define INF 1e18
#define all(v) (v).begin(),(v).end()
#define rall(v) (v).rbegin(),(v).rend()
#define pii pair<int,int>
#define pll pair<ll,ll>
#define OK cout<<"OK"<<endl;
const int mxn=2e5+5;
ll color[mxn],n,tree[mxn];
ll query(int ind){
ll ans=0;
while(ind>0){
ans+=tree[ind];
ind-=(ind&(-ind));
}
return ans;
}
void update(int ind,int val){
while(ind<=n){
tree[ind]+=val;
ind+=(ind&(-ind));
}
}
bool f(pii a,pii b){
return a.F+a.S<b.F+b.S;
}
ll funk(vector<pii>&vt){
ll ans=0;
sort(all(vt),f);
for(int i=0;i<n/2;i++){
ll x=vt[i].F+query(vt[i].F);
ans+=abs(x-1);
update(vt[i].F,-1);
ll y=vt[i].S+query(vt[i].S);
ans+=abs(y-1);
update(vt[i].S,-1);
}
return ans;
}
long long count_swaps(vector<int> s) {
n=s.size();
map<int,queue<int>>mp;
vector<pii>vt;
for(int i=0;i<n;i++){
if(mp[-s[i]].size()>0){
int x=mp[-s[i]].front();
mp[-s[i]].pop();
if(s[i]<0){
vt.pb({i+1,x});
}
else{
vt.pb({x,i+1});
}
}
else{
mp[s[i]].push(i+1);
}
}
ll ans=funk(vt);
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |