#include <iostream>
#include <cstring>
#include <cstdio>
#define mx 1000
int n=7;
int value[]={-100000,5,0,9,2,7,3,4};
int dp[mx],dir[mx];
int longest(int u)
{
if(dp[u]!=-1) return dp[u];
int maxi=0;
for(int v=u+1;v<=n;v++) //১ম শর্ত,v>u
{
if(value[v]>value[u]) //২য় শর্ত, value[v]>value[u]
{
if(longest(v)>maxi) //সর্বোচ্চ মানটা নিবো
{
maxi=longest(v);
dir[u]=v;
}
}
}
dp[u]=1+maxi; //১ যোগ হবে কারণ u নম্বর নোডটাও পাথের মধ্যে আছে
return dp[u];
}
void solution(int start)
{
while(dir[start]!=-1)
{
printf("index %d value %d\n",start,value[start]);
start=dir[start];
}
}
int main()
{
//READ("in");
memset(dp,-1,sizeof dp);
memset(dir,-1,sizeof dir);
int LIS=0,start;
for(int i=1;i<=n;i++)
{
printf("longest path from: %d\n",longest(i));
if(longest(i)>LIS)
{
LIS=longest(i);
start=i;
}
}
printf("LIS = %d Starting point %d\n",LIS,start);
solution(start);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGNzdGRpbz4KI2RlZmluZSBteCAxMDAwCmludCBuPTc7CmludCB2YWx1ZVtdPXstMTAwMDAwLDUsMCw5LDIsNywzLDR9OwppbnQgZHBbbXhdLGRpcltteF07CmludCBsb25nZXN0KGludCB1KQp7CglpZihkcFt1XSE9LTEpIHJldHVybiBkcFt1XTsKCWludCBtYXhpPTA7Cglmb3IoaW50IHY9dSsxO3Y8PW47disrKSAvL+Cnp+CmriDgprbgprDgp43gpqQsdj51Cgl7CgkJaWYodmFsdWVbdl0+dmFsdWVbdV0pIC8v4Keo4KefIOCmtuCmsOCnjeCmpCwgdmFsdWVbdl0+dmFsdWVbdV0KCQl7CgkJCWlmKGxvbmdlc3Qodik+bWF4aSkgLy/gprjgprDgp43gpqzgp4fgpr7gpprgp43gppog4Kau4Ka+4Kao4Kaf4Ka+IOCmqOCmv+CmrOCnh+CmvgoJCQl7CgkJCQltYXhpPWxvbmdlc3Qodik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyW3VdPXY7CgoJCQl9CgkJfQoJfQoJZHBbdV09MSttYXhpOyAvL+CnpyDgpq/gp4fgpr7gppcg4Ka54Kas4KeHIOCmleCmvuCmsOCmoyB1IOCmqOCmruCnjeCmrOCmsCDgpqjgp4fgpr7gpqHgpp/gpr7gppMg4Kaq4Ka+4Kal4KeH4KawIOCmruCmp+CnjeCmr+CnhyDgpobgppvgp4cKCXJldHVybiBkcFt1XTsKfQoKdm9pZCBzb2x1dGlvbihpbnQgc3RhcnQpCnsKCXdoaWxlKGRpcltzdGFydF0hPS0xKQoJewoJCXByaW50ZigiaW5kZXggJWQgdmFsdWUgJWRcbiIsc3RhcnQsdmFsdWVbc3RhcnRdKTsKCQlzdGFydD1kaXJbc3RhcnRdOwoJfQp9CgoKaW50IG1haW4oKQp7CgkvL1JFQUQoImluIik7CgltZW1zZXQoZHAsLTEsc2l6ZW9mIGRwKTsKICAgICAgICBtZW1zZXQoZGlyLC0xLHNpemVvZiBkaXIpOwoJaW50IExJUz0wLHN0YXJ0OwoJZm9yKGludCBpPTE7aTw9bjtpKyspCgl7CgkJcHJpbnRmKCJsb25nZXN0IHBhdGggZnJvbTogJWRcbiIsbG9uZ2VzdChpKSk7CgkJaWYobG9uZ2VzdChpKT5MSVMpCgkJewoJCQlMSVM9bG9uZ2VzdChpKTsKCQkJc3RhcnQ9aTsKCQl9Cgl9CglwcmludGYoIkxJUyA9ICVkIFN0YXJ0aW5nIHBvaW50ICVkXG4iLExJUyxzdGFydCk7Cglzb2x1dGlvbihzdGFydCk7CgoJcmV0dXJuIDA7Cn0K