結果
問題 | No.670 log は定数 |
ユーザー |
![]() |
提出日時 | 2018-03-23 23:13:27 |
言語 | Java (openjdk 23) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,077 bytes |
コンパイル時間 | 2,461 ms |
コンパイル使用メモリ | 84,252 KB |
実行使用メモリ | 90,832 KB |
最終ジャッジ日時 | 2024-06-24 22:48:22 |
合計ジャッジ時間 | 12,813 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | TLE * 1 -- * 9 |
ソースコード
import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.LinkedList;import java.util.Scanner;import java.util.TreeSet;public class Main {public static final long MOD = 1000000007;static long seed;static int next() {seed = seed ^ (seed << 13);seed = seed ^ (seed >>> 7);seed = seed ^ (seed << 17);return (int)(seed >>> 33);}public static class BIT {long[] dat;public BIT(int n){dat = new long[n + 1];}public void add(int k, int a){ // k : 0-indexedfor(int i = k + 1; i < dat.length; i += i & -i){dat[i] += a;}}public long sum(int s, int t){ // [s, t)if(s > 0) return sum(0, t) - sum(0, s);long ret = 0;for(int i = t; i > 0; i -= i & -i) {ret += dat[i];}return ret;}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);final int N = sc.nextInt();final int Q = sc.nextInt();seed = sc.nextLong();for (int i = 0; i < 10000; i++){ next();}int[] array = new int[N];for(int i = 0; i < N; i++){ array[i] = next(); }TreeSet<Integer> values = new TreeSet<Integer>();for(int i = 0; i < N; i++){ values.add(array[i]); }ArrayList<Integer> sorted = new ArrayList<Integer>(values);BIT bit = new BIT(N);for(int i = 0; i < N; i++){final int index = Collections.binarySearch(sorted, array[i]);//System.out.println(i + " " + array[i] + " " + index);bit.add(index, 1);}long answer = 0;for(int q = 0; q < Q; q++){final int x = next();final int x_index = Collections.binarySearch(sorted, x);//System.out.println(x);//System.out.println(values.subSet(0, x));if(x_index >= 0){//System.out.println(bit.sum(0, x_index) * q);answer ^= bit.sum(0, x_index) * q;}else{final int x_index2 = -(x_index + 1);//System.out.println(q + " " + x_index2 + " " + bit.sum(0, x_index2) + " " + bit.sum(0, x_index2) * q);answer ^= bit.sum(0, x_index2) * q;}}System.out.println(answer);}}