/ * まず明らかに1より大きく、多くの場合、0に貢献し、戻ってから計算LISを考える 1がある場合、CNT1 ++、およびCNT1のLISで更新し、リス++、0が存在する場合 、これは貪欲正しいことを確認一つのそのような構成は、現在より表面0の期間の後の段落0必ずしも以前この段落LISの[I、J]は、明らかにLIS + 1ため、 より多くの表面は、現在である場合1場合にのみ間隔1 、LIS + 1を作るために、LISの数よりも多い [iは、j]はサフィックス[I、n]は、すべての間隔で、1S LISの数よりも大きい場合にそうとする場合にのみ、この効果は1と同等でした、よい代わり * / の#include <ビット/ STDC H ++> 使用して 名前空間STD; の#define N 200005 チャーS [N]、T [N]; int型のmain(){ int型 N-; CIN >> S; N- = STRLEN(S ); INT LIS = 0、CNT1 = 0 ; のための(INT I = N- 。1; I> = 0 ; i-- ){ もし、(S [I] == ' 0 ')LIS ++ 。 他 CNT1 ++ ; もし(CNT1> LIS){ T [I] = ' 0 ' 。 LIS = CNT1。 } 他 T [I] =のS [i]は、 } COUT << T。 }