2完してもレーティング下がるらしい。
記事書く気もしません。元凶は不明らしいですが、Testerと信じて疑わないことにします。
追記
余談ですが、Testerがどうのこうの以前に自分の思考回路から生まれるソースコードがあれです。
#include<stdio.h> #include<vector> #include<queue> #include<algorithm> using namespace std; class ConvexSequence{ public: long long getMinimum(vector<int>a){ long long ret=1LL<<62; int i=0; for(int j=0;j<a.size();j++)if(a[i]>a[j])i=j; long long val=0; vector<int > b(a.size()); for(int j=0;j<a.size();j++)b[j]=a[j]; for(int j=i-1;j>0;j--){ if(j<a.size()-1&&b[j]*2>b[j-1]+b[j+1]){ val+=b[j]-(b[j-1]+b[j+1])/2; b[j]=(b[j-1]+b[j+1])/2; bool ok=true; do{ ok=true; for(int k=j;k<=i;k++){ if(k&&k<a.size()-1){ val+=max(0,b[k]-(b[k-1]+b[k+1])/2); if(b[k]*2>b[k-1]+b[k+1]){ ok=false;b[k]=(b[k-1]+b[k+1])/2; }}} }while(!ok); } } printf("%d %lld\n",i,val); for(int j=i+1;j<a.size()-1;j++){ if(j&&b[j]*2>b[j-1]+b[j+1]){ val+=b[j]-(b[j-1]+b[j+1])/2; b[j]=(b[j-1]+b[j+1])/2; bool ok=true; do{ ok=true; for(int k=j;k>=i;k--){ if(k&&k<a.size()-1){ val+=max(0,b[k]-(b[k-1]+b[k+1])/2); if(b[k]*2>b[k-1]+b[k+1]){ok=false;b[k]=(b[k-1]+b[k+1])/2;} }} }while(!ok); } } // if(i||i<a.size()-1)val+=max(0,b[i]-(b[i-1]+b[i+1])/2); ret=min(ret,val); printf("%d %lld\n",i,val); return ret; } };
C++とか難しいのでMath.maxとか書いていた