1. 程式人生 > 實用技巧 >Gym 100820-G

Gym 100820-G

題目:https://codeforces.com/gym/100820/problem/G

該題目可以通過十分巧妙的方法轉換成nlogn求最長不下降子序列。

#include<iostream>
#include<algorithm>
using namespace std;
struct point {
    long long x , y ;
    bool operator < (point &a){
        return x < a.x ;
    }
}a[110000];
long long n , r , w , h , x , y , t ;
long long ans[110000] ; int main(){ cin>>n>>r>>w>>h; for(int i = 1 ; i <= n ; i ++ ){ cin>>x>>y; a[i].x = ( x * r + y ) ; a[i].y = ( ( w - x ) * r + y ) ; } sort( a + 1 , a + n + 1 ); for( int i = 1 ; i <= n ; i ++ ){
if( a[i].y >= ans[t] ) ans[++t] = a[i].y ; else{ int p = lower_bound( ans + 1 , ans + t + 1 , a[i].y ) - ans ; ans[p] = a[i].y ; } } cout<<t<<endl; return 0 ; }

這裡將輸入的x,y座標轉換了。

具體怎麼做,這個題解講的很好。我也是看了該題解才發現可以這麼巧妙的轉化。