tungggg

dpseg

May 8th, 2022 (edited)
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. // http://vinhdinhcoder.net/Problem/Details/5062
  2.  
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5.  
  6. #define ms(s,n) memset(s,n,sizeof(s))
  7. #define all(a) a.begin(),a.end()
  8. #define present(t, x) (t.find(x) != t.end())
  9. #define sz(a) int((a).size())
  10. #define FOR(i, a, b) for (int i = (a); i < (b); ++i)
  11. #define FORd(i, a, b) for (int i = (a) - 1; i >= (b); --i)
  12. #define pb push_back
  13. #define pf push_front
  14. #define fi first
  15. #define se second
  16. #define mp make_pair
  17. #define endl "\n"
  18.  
  19.  
  20. typedef long long ll;
  21. typedef unsigned long long ull;
  22. typedef long double ld;
  23. typedef pair<int,int> pi;
  24. typedef vector<int> vi;
  25. typedef vector<pi> vii;
  26.  
  27. const int MOD = (int) 1e9+7;
  28. const int INF = (int) 1e9+2804;
  29. inline ll gcd(ll a,ll b){ll r;while(b){r=a%b;a=b;b=r;}return a;}
  30. inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
  31.  
  32.  
  33.  
  34. bool cmp ( pair < ll , ll > a, pair <ll, ll > b ){
  35.     return abs(a.first - a.second ) > abs ( b.first - b.second );
  36. }
  37.  
  38. int main(){
  39.     ios_base::sync_with_stdio(false);
  40.     cin.tie(NULL);
  41.     ll n;
  42.     cin >> n;
  43.     pair < ll, ll > a [n];
  44.     ll dp[n];
  45.     for (int i=0;i<n;i++){
  46.         cin >> a[i].first >> a[i].second ;
  47.         dp[i]=1;
  48.     }
  49.     sort ( a, a+n, cmp );
  50.  
  51.     // we use sort because we can pick any pair without caring about the initial order
  52.     // bài toán này ta có thể chọn theo vị trí bất kì ( không phải đoạn con của mảng ban đầu ) do đó
  53.     // ta có thể sắp xếp lại sao cho thuận tiện ( đưa về bài toán mảng con )
  54.    
  55.  
  56.     // cout <<"____________"<<endl;
  57.     // FOR(i,0,n) cout << a[i].first <<" "<<a[i].second <<endl;
  58.     cout << endl;
  59.     ll res=1;
  60.     for (int i=1;i<n;i++){
  61.         for (int j=0;j<i;j++){
  62.             if ( a[i].first >= a[j].first && a[i].second <= a[j].second && dp[i] < dp[j]+1 ){
  63.                 dp[i]=dp[j]+1;
  64.             }
  65.             res = max( res, dp[i]);
  66.         }
  67.     }
  68.     cout << res;
  69.     return 0;
  70. }
Add Comment
Please, Sign In to add comment