Advertisement
Guest User

furry pr0n

a guest
Nov 22nd, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ever (;;)
  3.  
  4. FILE *in = fopen("torturi.in", "r"), *out = fopen("torturi.out", "w") ;
  5.  
  6. const int MV = 25e4 ;
  7.  
  8. int firstStack, secondStack ;
  9.  
  10. int blat[MV] ;
  11. int new_blat[MV] ;
  12. int last[MV] ;
  13. int lis[MV] ;
  14. int pred[MV] ;
  15. int ans, n ;
  16.  
  17. int best(int l, int r, int key) {
  18.         while (r - l > 1) {
  19.                 int mij((l + r) >> 1) ;
  20.                 if (blat[last[mij]] < key) {
  21.                         r = mij ;
  22.                 } else l = mij ;
  23.         }
  24.         return r ;
  25. }
  26.  
  27. int LIS() {
  28.         last[1] = blat[1] ;
  29.         lis[1] = 1 ;
  30.         int len(0) ;
  31.         for (int i = 2 ; i <= n ; ++ i) {
  32.                 if (blat[i] <= blat[last[len]]) {
  33.                         pred[i] = last[len] ;
  34.                         last[++ len] = i ;
  35.                 } else {
  36.                         int poz = best(-1, len, blat[i]) ;
  37.                         last[poz] = i ;
  38.                         pred[i] = last[poz - 1] ;
  39.                 }
  40.         }
  41.         return len + 1 ;
  42. }
  43.  
  44. void afisare(int vv[], int sz) {
  45.         for (int i = 1 ; i <= sz ; ++ i) {
  46.                 std::cerr << vv[i] << ' ' ;
  47.         }
  48.         std::cerr << '\n' ;
  49. }
  50.  
  51. void get_new_blat(int start) {
  52.         start = last[start - 1] ;
  53.         std::vector<int> scot ;
  54.         for ever {
  55.                 scot.push_back(start) ;
  56.                 start = pred[start] ;
  57.                 if (!start) {
  58.                         break ;
  59.                 }
  60.         }
  61.         int index = scot.size() - 1 ;
  62.         int blaturi(0) ;
  63.         for (int i = 1 ; i <= n ; ++ i) {
  64.                 if (scot[index] == blat[i]) {
  65.                         index ++ ;
  66.                         continue ;
  67.                 }
  68.                 new_blat[++ blaturi] = blat[i] ;
  69.         }
  70.         afisare(new_blat, blaturi) ;
  71. }
  72.  
  73. int main() {
  74.         fscanf(in, "%d", &n) ;
  75.         for (int i = 1 ; i <= n ; ++ i) {
  76.                 fscanf(in, "%d", blat + i) ;
  77.         }
  78.         int ans = LIS() ;
  79.         get_new_blat(ans) ;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement