VasilM

8b_max_nenamalqvashta_redica

Jan 9th, 2013
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.10 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. #define MAX 1000000
  4.  
  5. int x[MAX]; /* Редица */
  6. /* Нулевият елемент на x[] не се използва! */
  7. unsigned n; /* Брой елементи в редицата */
  8. int LNS[MAX]; /* LNS[i] - минимален елемент, който може да стои на позиция i */
  9.  
  10. /* Намира дължината на най-дългата ненамаляваща подредица */
  11. unsigned LNS_Length(void)
  12. { unsigned i, r, k, l, med;
  13.  
  14.   for (LNS[1] = x[1], k = 1, i = 2; i <= n; i++) {
  15.     if (x[i] < LNS[1])        /* случай 1 */
  16.       LNS[1] = x[i];
  17.     else if (x[i] >= LNS[k])  /* случай 2 */
  18.       LNS[++k] = x[i];
  19.     else {                    /* случай 3 */
  20.       l = 1;
  21.       r = k;                  /* двоично търсене */
  22.       while (l < r - 1) {
  23.         med = (l + r) / 2;
  24.         if (LNS[med] <= x[i])
  25.           l = med;
  26.         else
  27.           r = med;
  28.       }
  29.       LNS[r] = x[i];
  30.     }
  31.   }
  32.   return k;
  33. }
  34.  
  35. int main(void) {
  36.     int ind=1;
  37.     while ( cin >> n ){
  38.         for( int i=1; i<=n; i++ ) cin >> x[i];
  39.         cout << LNS_Length() << endl;
  40.     }
  41.   return 0;
  42. }
  43. /*
  44. Задача 8b. [8.2.7] lns3.c
  45. Да се напише програма за намиране на най-дългата ненамаляваща подредица.
  46.  
  47.  Вход:
  48. На входа се задава числото n - брой на елемнтите на редицата  и след това стойностите на самите елементи - цели числа в интервала
  49. [-10, 105].  Входът съдържа много примери.
  50.  
  51.  Изход:
  52.  За всеки пример на отделен ред се отпечатва цяло число - дължината на най-дългата ненамаляваща подредица.
  53.  
  54.  Пример:
  55. 6
  56.  6 6 6 2 2 7
  57.  6
  58.  1 1 1 1 1 2
  59.  15
  60.  1 2 1 2 1 2 1 2 1 2 1 2 1 2 1
  61.  3
  62.  4 3 2
  63.  
  64. Решение на примера:
  65. 4
  66.  6
  67.  8
  68. 1
  69.  
  70.  Редиците са: 6 6 6 7; 1 1 1 1 1 2; 1 2 2 2 2 2 2 2 (има и друга); 4.
  71. */
Advertisement
Add Comment
Please, Sign In to add comment