結果
| 問題 |
No.59 鉄道の旅
|
| コンテスト | |
| ユーザー |
uafr_cs
|
| 提出日時 | 2015-09-15 00:50:24 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 601 ms / 5,000 ms |
| コード長 | 1,352 bytes |
| コンパイル時間 | 2,354 ms |
| コンパイル使用メモリ | 77,912 KB |
| 実行使用メモリ | 52,208 KB |
| 最終ジャッジ日時 | 2024-12-24 21:51:46 |
| 合計ジャッジ時間 | 7,637 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 12 |
ソースコード
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static class BIT {
int[] dat;
public BIT(int n) {
dat = new int[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 int sum(int s, int t) { // [s, t)
if (s > 0)
return sum(0, t) - sum(0, s);
int ret = 0;
for (int i = t; i > 0; i -= i & -i) {
ret += dat[i];
}
return ret;
}
public int get(int k) { // k : 0-indexed
int p = Integer.highestOneBit(dat.length - 1);
for (int q = p; q > 0; q >>= 1, p |= q) {
if (p >= dat.length || k < dat[p])
p ^= q;
else
k -= dat[p];
}
return p;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
final int N = sc.nextInt();
final int K = sc.nextInt();
final int SIZE = 1000000 + 1;
BIT bit = new BIT(SIZE);
for(int i = 0; i < N; i++){
final int W = sc.nextInt();
if(W >= 0){
final int count = bit.sum(W, SIZE);
if(count < K){
bit.add(W, 1);
}
}else{
final int count = bit.sum(-W, -W + 1);
if(count > 0){
bit.add(-W, -1);
}
}
}
System.out.println(bit.sum(0, SIZE));
}
}
uafr_cs