This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
import java.util.ArrayList;
import java.util.*;
public class shoes {
public long count_swaps(int[] s) {
int n=s.length;
PriorityQueue<Integer>pos[]=new PriorityQueue[n];
PriorityQueue<Integer>neg[]=new PriorityQueue[n];
for(int i=0;i<n;i++){
pos[i]=new PriorityQueue<>();
neg[i]=new PriorityQueue<>();
update(i,1,120000);
}
for(int i=0;i<n;i++){
if(s[i]>0){
pos[s[i]].add(i);
}
else{
neg[-1*s[i]].add(i);
}
}
// for(int i=0;i<n;i++){
// Collections.sort(pos[i]);
// }
int ans=0;
boolean[]visited=new boolean[n];
for(int i=0;i<n;i++){
if(!visited[i]){
if(s[i]>0){
visited[i]=true;
pos[s[i]].poll();
int idx=neg[s[i]].poll();
visited[idx]=true;
long add=query(idx)-query(i);
ans+=add==0?0:add;
update(idx,-1,120000);
}
else{
visited[i]=true;
neg[-1*s[i]].poll();
int idx=pos[-1*s[i]].poll();
visited[idx]=true;
update(idx,-1,120000);
long add=query(idx)-query(i);
ans+=add==0?0:add-1;
}
}
}
return ans;
}
long[]BIT=new long[150000];
void update(int x, long val,int n)
{
x+=5;
for(; x <= n; x += x&-x)
BIT[x] += val;
}
long query(int x)
{
x+=5;
long sum = 0;
for(; x > 0; x -= x&-x)
sum += BIT[x];
return sum;
}
}
Compilation message (stderr)
Note: shoes.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
# | 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... |