zoukankan      html  css  js  c++  java
  • P2782 友好城市

    乌古娜黑暗之神超级无敌传送门嘤嘤嘤
    emmmmm首先看到这道题的时候,由于两个数组的一一对应关系,很显然可以想到用结构体存储
    又因为解题与读入顺序无关,那么会想到按照一条岸作为关键字进行排序,那么排完序后,我们得到了一个有序数列和一个无序数列
    由于航线不能交叉,那么假设在有序数列中的城市a必然连接着无序数列中与有序数列中a前的城市及a后的城市相连的两个城市中间(好吧我承认有点绕),简而言之,就是求无序数列的最长上升(不下降)子序列,因为这题不会出现两个相同城市,so上升和不下降在这题是没有区别的
    那么下面贴上代码嘻嘻:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 int n,ans=1;
     9 int d[200005];
    10 struct node{
    11     int z,y;
    12 }a[200005];
    13 
    14 bool cmp(node a,node b){
    15     return a.z<b.z;
    16 }
    17 
    18 int main(){
    19     scanf("%d",&n);
    20     for(int i=1;i<=n;i++){
    21         scanf("%d%d",&a[i].z,&a[i].y);
    22     }
    23     sort(a+1,a+1+n,cmp);
    24     d[1]=a[1].y;
    25     for (int i=2;i<=n;i++){
    26         if (a[i].y>=d[ans]){
    27             d[++ans]=a[i].y;
    28         }
    29         else{
    30             int j=upper_bound(d+1,d+ans+1,a[i].y)-d;//lower_bonud
    31             d[j]=a[i].y; 
    32         }
    33     }
    34     printf("%d
    ",ans);
    35     return 0;
    36 }

    恩,那就酱紫,白白~~

    哦对了,新人开博鼓励一下吧。。

  • 相关阅读:
    第七周进度报告
    解析极限编程阅读笔记02
    解析极限编程阅读笔记01
    第六周进度报告
    合作开发项目-地铁线路查询
    构建之法阅读笔记03
    关于DeferredResult的思考
    java实现任务调度
    java里面如何提升编写速度
    收集整理mysql数据库设计规范与原则
  • 原文地址:https://www.cnblogs.com/hahaha2124652975/p/11123246.html
Copyright © 2011-2022 走看看