제출 #1294222

#제출 시각아이디문제언어결과실행 시간메모리
1294222Jawad_Akbar_JJGroup Photo (JOI21_ho_t3)C++20
100 / 100
440 ms134436 KiB
#include <iostream> using namespace std; const int N = 5005; int dp[N], inv[N][N], ext[N][N], ind[N], ft[2][N]; void Add(int t, int i){ for (; i; i -= i & -i) ft[t][i]++; } int get(int t, int i, int ans = 0){ for (; i < N; i += i & -i) ans += ft[t][i]; return ans; } int main(){ int n; cin>>n; for (int i=1, a;i<=n;i++) cin>>a, ind[a] = i, dp[i] = 1e9; for (int l=1;l<=n;l++){ for (int i=1;i<N;i++) ft[0][i] = 0; for (int r=l;r<=n;r++){ inv[l][r] = inv[l][r-1] + get(0, n - ind[r] + 1); ext[l][r] = ext[l][r-1] + get(1, ind[r]); Add(0, n - ind[r] + 1); } Add(1, ind[l]); } for (int i=0;i<n;i++){ for (int j=i+1;j<=n;j++) dp[j] = min(dp[j], dp[i] + inv[i+1][j] + ext[i+1][j]); } cout<<dp[n]<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...