Submission #162842

#TimeUsernameProblemLanguageResultExecution timeMemory
162842fluffypotatoArranging Shoes (IOI19_shoes)Java
10 / 100
95 ms10968 KiB
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 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...