Advertisement
royalsflush

What Goes Up - UVa 481 TLE

Sep 17th, 2012
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.67 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <stack>
  5. using namespace std;
  6.  
  7. vector<int> a;
  8. int dp[100010];
  9. int n;
  10. stack<int> s;
  11.  
  12. int main() {
  13.     int tmp;
  14.     while (scanf("%d", &tmp)!=EOF) {
  15.         a.push_back(tmp);
  16.     }
  17.     n=(int)a.size();
  18.  
  19.     for (int i=0; i<n; i++) {
  20.         dp[i]=1;
  21.  
  22.         for (int j=0; j<i; j++)
  23.             if (a[i]>a[j])
  24.                 dp[i]=max(dp[i],dp[j]+1);
  25.     }
  26.  
  27.     int mIdx=0;
  28.     for (int i=0; i<n; i++)
  29.         if (dp[i]>dp[mIdx]) mIdx=i;
  30.  
  31.     int prev=mIdx;
  32.     s.push(a[mIdx]);
  33.  
  34.     for (int i=prev-1; i>=0; i--)
  35.         if (a[prev]>a[i] && dp[prev]==dp[i]+1) {
  36.             s.push(a[i]);
  37.             prev=i;
  38.         }
  39.  
  40.     printf("%d\n-\n", dp[mIdx]);
  41.    
  42.     while (!s.empty()) {
  43.         printf("%d\n", s.top());
  44.         s.pop();
  45.     }
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement