結果

問題 No.670 log は定数
ユーザー uafr_cs
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

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-indexed
for(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);
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0