http://acm.pku.edu.cn/JudgeOnline/problem?id=1887
(最长非单调增序列,,要用N*LOG N(不然会超时。))
二分模板:
int Find(int a,int end)
{
if(a>=ans[1])return 1;
for(int beg=1;beg!=end-1;)
{
int mid=(beg+end)/2;
if(ans[mid]<=a)end=mid;
else beg=mid;
}
return end;
}
刚开始这个N*LOGN的算法主要是二分的方面取优
然而,,鸭子的一句话让我仔细想想
我才发现
巧妙的是他不是根据原先N^2的算法在原地取优,而是换一种思维,用另外一个数组来记录
数组ans[i]记录长度为i的最优序列的最小值的最大值,
感觉像是贪心多一点,这是一个值得反复琢磨的算法,相信在以后会有很大的用处,,