题目描述:
对于一个长度为 N 的整数数列 A1, A2, · · · AN,小蓝想知道下标 l 到 r 的部分和
是多少?
然而,小蓝并不知道数列中每个数的值是多少,他只知道它的 M 个部分和的值。其中第 i 个部分和是下标 li 到 ri 的部分和
,值是 S i 。
代码:
package lanqiao;
import java.math.BigInteger;
import java.util.*;
public class Main {
static final int N = (int) 2e5 + 10;
static int[] p = new int[N];
static long[] d = new long[N];
static int n, m, q;
static int find(int x) {
if (p[x] != x) {
int t = p[x];
p[x] = find(p[x]);
d[x] += d[t];
}
return p[x];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
q = sc.nextInt();
for(int i = 1;i <= n;i ++)
{
p[i] = i;
}
while(m -- > 0)
{
int l = sc.nextInt();
int r = sc.nextInt();
long s = sc.nextLong();
int pt = find(l - 1),pr = find(r);
p[pt] = pr;
d[pt] = d[r] - s - d[l - 1];
// System.out.println( d[pt]);
}
while(q -- > 0)
{
int l = sc.nextInt();
int r = sc.nextInt();
int pt = find(l - 1),pr = find(r);
if(pt != pr){
System.out.println("UNKNOWN");
}else{
System.out.println(d[r] - d[l - 1]);
}
}
}
}