zoukankan      html  css  js  c++  java
  • 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
    ",cnt);
    56     return 0;
    57 }
  • 相关阅读:
    Java实现生产者消费者模式
    LRU结构(采用hashmap + 双向链表实现)
    自定义优先级队列PriorityQueue
    KdApiSearchDemo
    MongoDBHelper
    WebApiInvoker
    轨迹
    SignAttribute
    web api 压缩
    web api 缓存类
  • 原文地址:https://www.cnblogs.com/-Ackerman/p/11169162.html
Copyright © 2011-2022 走看看