Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- const int maxn = 1e5 + 10;
- const int INF = 2e9 + 5;
- int n;
- int arr[maxn];
- int dp[maxn]; /*dp[i] znaci deka najdolgata rastecka podniza do pozicija i e ednakva na dp[i]*/
- int rec(int at) /**/ {
- if(dp[at] != -1) {
- return dp[at];
- }
- int ret = 0;
- for(int j = at + 1; j < n; ++j) { // ideme desno vo nizata
- if(arr[at] < arr[j]) {
- ret = max(ret, rec(j) + 1);
- }
- }
- return dp[at] = ret;
- }
- int main(){
- cin >> n;
- for(int i = 0; i < n; ++i) {
- cin >> arr[i];
- dp[i] = -1;
- }
- int lis = 0;
- for(int i = 0; i < n; ++i) {
- lis = max(lis, rec(i) + 1);
- }
- cout << lis << endl;
- return 0;
- }
- /*
- [10 9 2 5 3 7 101 18]
- rec(0) -> rec(6)
- rec(0) -> rec(7)
- rec(1) -> rec(6)
- rec(1) -> rec(7)
- rec(2) -> rec(3) -> rec(5) -> rec(6)
- rec(2) -> rec(3) -> rec(5) -> rec(7)
- rec(2) -> rec(4) -> rec(5) -> rec(6)
- rec(2) -> rec(4) -> rec(5) -> rec(7)
- .
- .
- .
- */
Advertisement
Add Comment
Please, Sign In to add comment