题目描述:
对于一个长度为 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]);}}}
}