历届真题 双向排序 60分版

89 阅读1分钟

image.png

因为单纯用sort进行排序,超时了小白骗分

给定序列 (a1, a2, · · · , an) = (1, 2, · · · , n),即 ai = i。 小蓝将对这个序列进行 m 次操作,每次可能是将 a1, a2, · · · , aqi 降序排列,或者将 aqi , aqi+1, · · · , an 升序排列。 请求出操作完成后的序列。

public class Main {
	
	static int n,m;//长度跟操作次数
	
	static int pi,qi;
	
	static Integer[] arr;
	
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		n = sc.nextInt();
		m = sc.nextInt();
		arr = new Integer[n+1];
		
		for (int i = 1; i <= n; i++) {
			arr[i] = i;
		}
		
		for(int i = 0;i < m;i++) {
			f(sc.nextInt(),sc.nextInt());
		}
		
		for (int i = 1; i <= n; i++) {
			System.out.print(arr[i]+" ");
		}
	}
	
	static void f(int pi,int qi) {
		if(pi == 0) {
			//降序
			Arrays.sort(arr,1,qi+1);
			for(int i = 1,j = qi;i<j;i++,j--) {
				int t = arr[i];
				arr[i] = arr[j];
				arr[j] = t;
			}
		}else {
			//升序
			Arrays.sort(arr,qi,arr.length);
		}
//		for (int i = 1; i <= n; i++) {
//			System.out.print(arr[i]+" ");
//		}
	}
}

image.png