A. Reorder the Array (二分变形)

Posted -ackerman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A. Reorder the Array (二分变形)相关的知识,希望对你有一定的参考价值。

题目链接:http://codeforces.com/problemset/problem/1007/A

 

题目大意:就是给出长度为n的序列(a[i]),让你对它进行重新排序(b[i]),使b[i]>a[i] 的数目最多

 

思路:

二分就是了,找到第一个大于key的就是最完美的选择(但是要注意如果选过的不能在选) 算是二分查找的一种变形吧

 

AC代码:

 1 #include <cstdio>
 2 #include <string>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <cstdbool>
 6 #include <string.h>
 7 #include <math.h>
 8 
 9 
10 using namespace std;
11 
12 const int maxn = 1e5+5;
13 int a[maxn],b[maxn];
14 int vis[maxn]= 0;
15 
16 int binarySearch(int b[],int vis[],int n,int key)
17 
18     int left = 0,right = n-1;
19     while (left <= right)
20     
21         int mid = (right + left) / 2;
22         if (b[mid] > key)
23             right = mid - 1;
24         else
25             left = mid + 1;
26     
27     while (vis[left]!=0 && b[left] > key)
28         left++;
29     if (b[left] <= key)
30         return -1;
31     else
32         vis[left]++;
33         return left;
34     
35 
36 
37 
38 
39 int main()
40 
41     int n,cnt = 0;
42     cin >> n;
43     for (int i=0;i<n;i++)
44     
45         cin >> a[i];
46         b[i] = a[i];
47     
48     sort(b,b+n);
49     for (int i=0;i<n;i++)
50     
51         int ant = binarySearch(b,vis,n,a[i]);
52         if (ant >= 0)
53             cnt++;
54     
55     printf("%d\n",cnt);
56     return 0;
57 

 

以上是关于A. Reorder the Array (二分变形)的主要内容,如果未能解决你的问题,请参考以下文章

Reorder array to construct the minimum number

Sonar建议Reorder the modifiers to comply with the Java Language Specification重新排序修饰符以符合Java语言规范

Sonar建议Reorder the modifiers to comply with the Java Language Specification重新排序修饰符以符合Java语言规范

leetcode1466. Reorder Routes to Make All Paths Lead to the City Zero

CF1006C Three Parts of the Array

[LeetCode] 937. Reorder Data in Log Files 日志文件的重新排序