ADDED SRM/518-U/1A.cpp Index: SRM/518-U/1A.cpp ================================================================== --- SRM/518-U/1A.cpp +++ SRM/518-U/1A.cpp @@ -0,0 +1,33 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +typedef long long LL; +typedef complex CMP; + +class LargestSubsequence { public: + string getLargest(string s) + { + string result; + for(string::iterator it=s.begin(); it!=s.end(); ) { + it = max_element(it, s.end()); + if( it != s.end() ) + result += *it++; + } + return result; + } +}; ADDED SRM/518-U/1B.cpp Index: SRM/518-U/1B.cpp ================================================================== --- SRM/518-U/1B.cpp +++ SRM/518-U/1B.cpp @@ -0,0 +1,52 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +typedef long long LL; +typedef complex CMP; + +class ConvexSequence { public: + long long getMinimum(vector a) + { + int i = min_element(a.begin(), a.end()) - a.begin(); + vector pre(a.begin(), a.begin()+i+1); + reverse(pre.begin(), pre.end()); + vector post(a.begin()+i, a.end()); + return convex_incr(pre) + convex_incr(post); + } + + LL convex_incr(vector a) + { + if( a.empty() ) + return 0; + for(int i=a.size()-1; i>=0; --i) + a[i] -= a[0]; + + LL cnt = 0; + for(int i=1; i