http://codeforces.com/contest/982/problem/B
题意:
输入:有n排椅子(每排坐俩),每排椅子的宽带都不一样,第二行输入它们的宽度,然后假设有n个站台,每个站台会上两个人,人可以分为两类,第一类人是找空排坐,并且还找宽度最小的坐;第二类人找旁边有人的坐,并且在这基础上找宽度最大的坐。第三行输入2*n个人,0为第一类人,1为第二类人。
输出:每个人分别坐在了第几排
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
StringTokenizer ana = new StringTokenizer(bf.readLine()) ;
for(int i = 0; i < n; i++){
int temp = Integer.parseInt(ana.nextToken());
map.put(temp, i+1);
}
LinkedList<Integer> list = new LinkedList<Integer>(map.keySet());
Collections.sort(list);
String str = bf.readLine();
for(int i = 0; i < 2*n; i++){
if(str.charAt(i)=='0'){
int temp = list.removeFirst();
list.add(temp);
System.out.print(map.get(temp)+" ");
}else{
int temp = list.removeLast();
System.out.print(map.get(temp)+" ");
}
}
}
}