#include using namespace std; typedef signed long long ll; #define _P(...) (void)printf(__VA_ARGS__) #define FOR(x,to) for(x=0;x<(to);x++) #define FORR(x,arr) for(auto& x:arr) #define FORR2(x,y,arr) for(auto& [x,y]:arr) #define ALL(a) (a.begin()),(a.end()) #define ZERO(a) memset(a,0,sizeof(a)) #define MINUS(a) memset(a,0xff,sizeof(a)) template bool chmax(T &a, const T &b) { if(a bool chmin(T &a, const T &b) { if(a>b){a=b;return 1;}return 0;} //------------------------------------------------------- int N; int P[3030]; int S[3030][3030]; int sum[3030]; int dp[3030][3030]; int from[3030][3030]; void dfs(int cur,int L,int R,int FL,int FR) { if(L>=R) return; int M=(L+R)/2; int best=FL; dp[cur][M]=1<<30; for(int x=FL;x<=FR;x++) { if(dp[cur][M]>dp[x][M-1]+S[x][cur]) { dp[cur][M]=dp[x][M-1]+S[x][cur]; best=x; } } dfs(cur,L,M,FL,best); dfs(cur,M+1,R,best,FR); } void solve() { int i,j,k,l,r,x,y; string s; cin>>N; FOR(i,N) { cin>>P[i]; P[i]--; } FOR(x,N) { ZERO(sum); FOR(y,x) sum[P[y]]++; FOR(y,N+1) if(y) sum[y]+=sum[y-1]; int pat=0; for(y=x;y