我在一本书中找到了 LIS 的代码,但我不太能够证明正确性。有人可以帮我解决这个问题。如果新元素不是最大值,则所有代码都在删除集合中新插入元素旁边的元素,否则只插入新元素。
set<int> s;
set<int>::iterator it;
for(int i=0;i<n;i++)
{
s.insert(arr[i]);
it=s.find(arr[i]);
it++;
if(it!=s.end())
s.erase(it);
}
cout<<s.size()<<endl;
n 是序列的大小,arr 是序列。如果我们不必找到“严格”递增的序列,我认为以下代码不会起作用。我们能否修改代码以找到允许相等的递增序列。
编辑:该算法仅在输入不同时才有效。