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>
#define INF 1e9+7
#define ll long long
#define ull unsigned ll
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pcc pair<char,char>
#define pdd pair<long double,long double>
#define pipii pair<int,pii>
#define plpll pair<ll,pll>
#define vi vector<int>
#define vvi vector<vi>
#define v3i vector<vvi>
#define v4i vector<v3i>
#define fi first
#define se second
#define mp make_pair
#define eb emplace_back
#define ins insert
#define ln '\n'
#define all(v) v.begin(),v.end()
using namespace std;
const int up=2e5+5;
int tree[4*up];
void update(int node,int l,int r,int pos,int val){
if(l==r){
tree[node]=val;
}
else{
int mid=(l+r)>>1;
if(pos<=mid){
update(node<<1,l,mid,pos,val);
}
else{
update((node<<1)+1,mid+1,r,pos,val);
}
tree[node]=tree[node<<1]+tree[(node<<1)+1];
}
}
int query(int node,int l,int r,int ql,int qr){
if(ql>r or l>qr) return 0;
if(ql<=l&&r<=qr) return tree[node];
int mid=(l+r)>>1;
return query(node<<1,l,mid,ql,qr)+query((node<<1)+1,mid+1,r,ql,qr);
}
ll count_swaps(vi s){
ll res=0;
int n=s.size();
map<int,set<int>>v;
for(int i=0;i<n;++i){
v[s[i]].ins(i);
update(1,1,n,i+1,1);
}
int color[n];
memset(color,0,sizeof(color));
for(int i=0;i<n;++i){
if(color[i]) continue;
int k=-s[i];
int t=*v[k].lower_bound(i);
color[t]=1;
res+=query(1,1,n,i+1,t+1)-1;
// cout<<query(1,1,n,i+1,t+1)<<ln;
if(s[i]<0) res--;
//cout<<res<<ln;
v[k].erase(t);
update(1,1,n,t+1,0);
}
return res;
}
| # | 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... |