int a[maxn], d[maxn], used[maxn], path[maxn], n;intLIS(){// d[]存LIS, a[]原數組int len =0;for(int i =1; i <= n;++i){int it =lower_bound(d, d + len, a[i])- d;if(it == len){d[len++]= a[i]; path[i]= len;}else{d[it]= a[i];path[i]= it +1;}}fill(used, used+n+1,0);int tmp = len;for(int i = n; i >=1;--i){if(path[i]== tmp) used[i]=1, tmp--;}return len;}