# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
478901 | arwaeystoamneg | Group Photo (JOI21_ho_t3) | Java | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
import java.util.*;
import java.io.*;
class segment_tree// "segment tree"
{
int n;
int[]a;
segment_tree(int n)
{
this.n = n;
a = new int[n];
}
void update(int i,int j)
{
a[i] = j;
}
int query(int i,int j)
{
int ans= 0;
for(int k = i;k<j + 1;k++)ans += a[k];
return ans;
}
}
public class lab
{
public static void main(String[]args)
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a= new int[n];
for(int i = 0;i<n;i++) {a[i] = sc.nextInt();a[i]--;}
int[]dp = new int[n + 1];
for(int i= 0;i<n+1;i++)dp[i] = 1000000000;
dp[n] = 0;
for(int i= n;i>=0;i--)
{
int val = dp[i];
ArrayList<Integer>b = new ArrayList<Integer>();
for(int y:a)if(y<i)b.add(y);
int[]idx = new int[i];
for(int j = 0;j<i;j++)idx[b.get(j)] = j;
segment_tree sum = new segment_tree(i);
for(int j= i -1;j>=0;j--)
{
val += i - idx[j] - 1;
val -=sum.query(0,idx[j]);
sum.update(idx[j],1);
dp[j] = Math.min(dp[j],val);
}
}
System.out.println(dp[0]);
}
}