本で 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 はシーケンスです。「厳密に」増加するシーケンスを見つける必要がない場合、次のコードが機能するとは思いません。コードを変更して、等式が許可される増加シーケンスを見つけることができますか?
編集: アルゴリズムは、入力が異なる場合にのみ機能します。