P2782 友好城市

烏古娜黑暗之神超級無敵傳送門嚶嚶嚶
emmmmm首先看到這道題的時候,因爲兩個數組的一一對應關係,很顯然能夠想到用結構體存儲
又由於解題與讀入順序無關,那麼會想到按照一條岸做爲關鍵字進行排序,那麼排完序後,咱們獲得了一個有序數列和一個無序數列
因爲航線不能交叉,那麼假設在有序數列中的城市a必然鏈接着無序數列中與有序數列中a前的城市及a後的城市相連的兩個城市中間(好吧我認可有點繞),簡而言之,就是求無序數列的最長上升(不降低)子序列,由於這題不會出現兩個相同城市,so上升和不降低在這題是沒有區別的
那麼下面貼上代碼嘻嘻:node

 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\n",ans);
35     return 0;
36 }

恩,那就醬紫,白白~~ios

哦對了,新人開博鼓勵一下吧。。數組

相關文章
相關標籤/搜索