Gym 100820-G
阿新 • • 發佈:2020-07-13
題目: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座標轉換了。
具體怎麼做,這個題解講的很好。我也是看了該題解才發現可以這麼巧妙的轉化。