Submission #3390377
Source Code Expand
import java.util.*;
class Main {
static long[] bit0,bit1;
static int[] a;
static int m,n;
static int maxN = 100000+100;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
a = new int[n+1];
bit0 = new long[100000+100];
bit1 = new long[100000+100];
for(int i=1;i<=n;i++) a[i]=sc.nextInt();
long oriSum = 0;
for(int i=1;i<n;i++) oriSum += a[i]<a[i+1]?a[i+1]-a[i]:m-a[i]+a[i+1];
long temp[] = new long[m+1];
for(int i=1;i<=n-1;i++) {
handle(a[i],a[i+1]);
for(int j=1;j<=m;j++) temp[j] = sim_sum(j);
}
long res = 0;
//for(int i=1;i<=m;i++) temp[i] = sim_sum(i);
for(int i=1;i<=m;i++) res = Math.max(res,temp[i]);
System.out.println(oriSum-res);
}
static long sum(long[] bit, int i){
long ans = 0;
while(i>0){
ans += bit[i];
i -= i&(-i);
}
return ans;
}
static void add(long[] bit, int idx, long val){
while(idx<=m){
bit[idx] += val;
idx += idx&(-idx);
}
}
static long sim_sum(int i){
return sum(bit1,i)*i+sum(bit0,i);
}
// here simulate adding val to all position within the interval [left,right]
static void sim_add(int left, int right, long val){
if(left>right){
return;
}
add(bit0,left,-val*(left-1));
add(bit1,left,val);
add(bit0,right+1,val*right);
add(bit1,right+1,-val);
}
static void handle(int from, int to){
if(from<to){
if(from==to-1) return;
sim_add(from+2,to,1);
sim_add(to+1,to+1,-(to-from-1));
} else if(from > to){
sim_add(from+2,m,1);
sim_add(1,1,m-from);
sim_add(2,to,1);
sim_add(to+1,to+1,-(m-from+to-1));
}
}
}
Submission Info
Submission Time |
|
Task |
E - guruguru |
User |
AlbertZ |
Language |
Java8 (OpenJDK 1.8.0) |
Score |
0 |
Code Size |
2059 Byte |
Status |
TLE |
Exec Time |
2109 ms |
Memory |
49060 KB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
0 / 700 |
Status |
|
|
Set Name |
Test Cases |
Sample |
sample1.txt, sample2.txt |
All |
half0.txt, half1.txt, half2.txt, half3.txt, half4.txt, min_m.txt, min_n.txt, mx0.txt, mx1.txt, mx2.txt, rnd0.txt, rnd1.txt, rnd2.txt, rnd3.txt, rnd4.txt, rnd5.txt, rnd6.txt, rnd7.txt, rnd8.txt, rnd9.txt, sample1.txt, sample2.txt |
Case Name |
Status |
Exec Time |
Memory |
half0.txt |
TLE |
2109 ms |
42332 KB |
half1.txt |
TLE |
2108 ms |
29680 KB |
half2.txt |
TLE |
2109 ms |
46560 KB |
half3.txt |
TLE |
2109 ms |
47500 KB |
half4.txt |
TLE |
2109 ms |
46948 KB |
min_m.txt |
AC |
95 ms |
21204 KB |
min_n.txt |
AC |
106 ms |
23764 KB |
mx0.txt |
TLE |
2109 ms |
46864 KB |
mx1.txt |
TLE |
2108 ms |
49060 KB |
mx2.txt |
TLE |
2109 ms |
48964 KB |
rnd0.txt |
AC |
117 ms |
20948 KB |
rnd1.txt |
AC |
99 ms |
22612 KB |
rnd2.txt |
AC |
1108 ms |
27668 KB |
rnd3.txt |
TLE |
2109 ms |
46844 KB |
rnd4.txt |
AC |
751 ms |
46476 KB |
rnd5.txt |
AC |
153 ms |
25944 KB |
rnd6.txt |
AC |
95 ms |
25428 KB |
rnd7.txt |
AC |
608 ms |
25132 KB |
rnd8.txt |
AC |
788 ms |
32992 KB |
rnd9.txt |
AC |
100 ms |
23636 KB |
sample1.txt |
AC |
93 ms |
22740 KB |
sample2.txt |
AC |
95 ms |
24788 KB |