给定两个长度都为N的整型数组a[N]和b[N],求满足如下条件的闭区间个数:在区间[l,r]上,a中的任意元素都比b中的任意元素小。
这个问题是O(N)复杂度。
关键在于发现一个规律:如果在区间[l+d,r]上满足上述条件,那么在更小的区间上[l,r]必然也满足上述条件,所以就可以用一个指针不停往后走。
import java.util.Scanner;
public class Main {
Main() {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int[] a = new int[n];
int[] b = new int[n];
for (int i = 0; i < n; i++) a[i] = cin.nextInt();
for (int i = 0; i < n; i++) b[i] = cin.nextInt();
int s = 0;
for (int i = 0; i < n; ) {
if (a[i] >= b[i]) {
i++;
continue;
}
int ma = Integer.MIN_VALUE, mi = Integer.MAX_VALUE;
int r = i;
for (; r < n; r++) {
ma = Math.max(a[r], ma);
mi = Math.min(b[r], mi);
if (mi <= ma) break;
}
s += (r - i + 1) * (r - i) / 2;
if (i == r) i++;
else i = r;
}
System.out.println(s);
}
public static void main(String[] args) {
new Main();
}
}
原文地址:https://www.cnblogs.com/weiyinfu/p/9499427.html
时间: 2024-10-11 03:54:23