zoukankan      html  css  js  c++  java
  • pta l2-14(列车调度)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805063166312448

    题意:给定n个数的重排列,求至少需要多少轨道,使最终的排列按降序排列。

    思路:这道题和hdoj1257是类似的,http://acm.hdu.edu.cn/showproblem.php?pid=1257,其实就是求原排列最少有多少个下降子序列,这也就是LIS问题的O(nlogn)解法原理,所以本题就转换成了求LIS的长度问题。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int len,tmp,n;
     5 int dp[100005];
     6 
     7 int main(){
     8     scanf("%d",&n);
     9     scanf("%d",&tmp);
    10     --n;
    11     dp[++len]=tmp;
    12     while(n--){
    13         scanf("%d",&tmp);
    14         if(tmp>dp[len]) dp[++len]=tmp;
    15         else if(tmp<=dp[1]) dp[1]=tmp;
    16         else{
    17             int l=1,r=len,m;
    18             while(l<=r){
    19                 m=(l+r)/2;
    20                 if(tmp>dp[m-1]&&tmp<=dp[m]) break;
    21                 if(tmp>dp[m]) l=m+1;
    22                 else r=m-1;
    23             }
    24             dp[m]=tmp;
    25         }
    26     }
    27     printf("%d
    ",len);
    28     return 0;
    29 }
  • 相关阅读:
    flush logs
    slave-skip-errors,sql_slave_skip_counter
    稀饭
    table
    profiles
    索引使用规范
    innodb_rollback_on_timeout
    mysql账号管理
    跨库复制
    linux.sh
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/10547794.html
Copyright © 2011-2022 走看看