我试图在java中解决竞争性编程问题 原始问题:你将获得N个虫子的强度。现在可以通过获取其余N-1个虫子的强度的GCD来计算虫子的相对强度。给定包含单个整数X的Q查询,您必须找到相对强度大于X的错误数。 其中
1 <= N <= 10^5
1 <= Q <= 10^5
1 <= Ai <= 10^9
1 <= X <= 10^5
我从10个TC中获得TLE。 任何人都可以帮我解决可行的解决方案吗?
我的代码:
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int t=sc.nextInt();
int []arr=new int[n];
for (int i = 0; i < n; i++) {
arr[i]=sc.nextInt();
}
arr=mergeSort(arr);
int gcd=arr[0];
for(int i = 1; i < n; i++){
gcd = gcd(gcd, arr[i]);
}
while(t-->0){
int comp=sc.nextInt();
int count=0;
if (arr[1]>gcd) {
int tempgcd=arr[1];
for(int i = 2; i < n; i++){
tempgcd = gcd(tempgcd, arr[i]);
}
if (tempgcd>comp) {
++count;
}
}
if (gcd>comp) {
count=count+n-1;
}
System.out.println(count);
}
sc.close();
}
答案 0 :(得分:1)
制作两个辅助阵列
通过gcd从左到右填充L[]
通过gcd从右到左填充R[]
现在找到第i个bug的相对强度为gcd(L[i-1], R[i+1])
(可以进行优化)