• toj 4071 最长不下降子序列


    题目描述:给出2D空间中的n只鸟的坐标,射手对其进行射击,要求射击的鸟的坐标越来越大,即对于第i和第i+1只鸟,要求满足:xi<=xi+1 && yi <= yi+1。求最多能射击多少只鸟。

    思路:将所有点按照x坐标排序,x坐标相同则按照y坐标排序。则x方向上可以满足限制,对y方向上求最长不下降子序列即可。由于数据量较大,需要采取nlogn的优化算法。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 const int N = 100000;
     7 int s[N];
     8 int top;
     9 
    10 struct Node 
    11 {
    12     int x, y;
    13 } node[N];
    14 
    15 bool cmp( Node a, Node b )
    16 {
    17     if ( a.x != b.x ) return a.x < b.x;
    18     return a.y < b.y;
    19 }
    20 
    21 int main ()
    22 {
    23     int t;
    24     scanf("%d", &t);
    25     while ( t-- )
    26     {
    27         int n;
    28         scanf("%d", &n);
    29         for ( int i = 0; i < n; i++ )
    30         {
    31             scanf("%d%d", &node[i].x, &node[i].y);
    32         }
    33         sort( node, node + n, cmp );
    34         top = 0;
    35         s[top++] = node[0].y;
    36         for ( int i = 1; i < n; i++ )
    37         {
    38             if ( node[i].y >= s[top - 1] )
    39             {
    40                 s[top++] = node[i].y;
    41             }
    42             else
    43             {
    44                 int tmp = upper_bound( s, s + top, node[i].y ) - s;
    45                 s[tmp] = node[i].y;                
    46             }
    47         }
    48         printf("%d
    ", top);        
    49     }
    50     return 0;
    51 }

     

  • 相关阅读:
    显示等待WebDriverWait+EC
    mac 上查看python3的各种安装路径
    layui弹窗全屏显示
    Mysql 一些细节方面解析(一)--MyISAM和InnoDB的主要区别和应用场景
    命令关闭tomcat
    xml 写sql语句文件头
    mysql update 修改多个字段and的语法问题
    zookeeper安装
    Java 基础--移位运算符
    SQL mybatis动态查询小结
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/4401727.html
Copyright © 2020-2023  润新知