交叉排序
蒜头君很无聊,现在有 NNN 个数,其中第 i(1≤i≤N)i(1 \leq i \leq N)i(1≤i≤N) 个数是 AiA_iAi。
现在他先将 Al1,Al1+1...Ar1A_{l_1}, A_{l_1+1}...A_{r_1}Al1,Al1+1...Ar1 从小到大排序。
再将 Al2,Al2+1...Ar2A_{l_2}, A_{l_2+1}...A_{r_2}Al2,Al2+1...Ar2 从大到小排序。
请输出 AAA 排序后的最终结果。
输入格式
第一行五个整数 N,l1,r1,l2,r2(l1<r1,l2<r2)N, l_1, r_1, l_2, r_2(l_1 < r_1, l_2 < r_2)N,l1,r1,l2,r2(l1<r1,l2<r2),均不超过 100000100000100000。
第二行 NNN 个不超过 int 范围的整数,表示 AAA 数组。
输出格式
一行 NNN 个用空格分隔的整数,表示 AAA 排序以后的结果。
样例输入
6 1 3 2 4 8 3 1 6 9 2
样例输出
1 8 6 3 9 2
package 计蒜客; import java.util.Arrays; import java.util.Scanner; public class 交叉排序 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan=new Scanner(System.in); int n=scan.nextInt(); int l1=scan.nextInt(); int r1=scan.nextInt(); int l2=scan.nextInt(); int r2=scan.nextInt(); int[] arr=new int[n]; for(int i=0;i<n;i++){ arr[i]=scan.nextInt(); } int[] arr1=new int[r1-l1+1]; int[] arr2=new int[r2-l2+1]; int j=0; for(int i=l1-1;i<r1;i++){ arr1[j++]=arr[i];//取出 } Arrays.sort(arr1);//从小到大排序 j=0; for(int i=l1-1;i<r1;i++){ arr[i]=arr1[j++];//放回 } j=0; for(int i=l2-1;i<r2;i++){ arr2[j++]=arr[i];//取出 } Arrays.sort(arr2);//从小到大排序 for(int i=0;i<arr2.length/2;i++){ int temp=arr2[i]; arr2[i]=arr2[arr2.length-i-1]; arr2[arr2.length-i-1]=temp; }//从大到小排序 j=0; for(int i=l2-1;i<r2;i++){ arr[i]=arr2[j++];//放回 } for(int i=0;i<arr.length;i++){ if(i==arr.length-1){ System.out.println(arr[i]); } else System.out.print(arr[i]+" "); } } }