結果
問題 | No.833 かっこいい電車 |
ユーザー |
|
提出日時 | 2019-05-24 22:45:31 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 1,783 ms / 2,000 ms |
コード長 | 2,113 bytes |
コンパイル時間 | 2,876 ms |
コンパイル使用メモリ | 77,956 KB |
実行使用メモリ | 71,936 KB |
最終ジャッジ日時 | 2024-07-02 03:46:17 |
合計ジャッジ時間 | 32,221 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 30 |
ソースコード
import java.util.*;import java.io.*;public class Main {public static void main(String[] args) throws Exception {new Main().run();}class SegTree {int n;long[] v;public SegTree(int n_) {n = 1;while (n < n_)n *= 2;v = new long[2 * n - 1];}void add(int k, long val) {k += n - 1;v[k] += val;while (k > 0) {k = (k - 1) / 2;v[k] = v[2 * k + 1] + v[2 * k + 2];}}long sum(int a, int b) {return sum(0, n, a, b, 0);}long sum(int l, int r, int a, int b, int k) {if (a <= l && r <= b)return v[k];else if (b <= l || r <= a)return 0;else {long lv = sum(l, (l + r) / 2, a, b, 2 * k + 1);long rv = sum((l + r) / 2, r, a, b, 2 * k + 2);return lv + rv;}}}void run() throws Exception {Scanner sc = new Scanner(System.in);int N = sc.nextInt();int Q = sc.nextInt();long[] A = new long[N];for (int i = 0; i < A.length; ++i) {A[i] = sc.nextLong();}SegTree seg1 = new SegTree(N);SegTree seg2 = new SegTree(N);for (int i = 0; i < N; ++i) {seg1.v[i + seg1.n - 1] = A[i];}for (int i = seg1.n - 2; i >= 0; --i) {seg1.v[i] = seg1.v[2 * i + 1] + seg1.v[2 * i + 2];}for (int i = 0; i < Q; ++i) {int query = sc.nextInt();int x = sc.nextInt();--x;if (query == 1) {if (seg2.sum(x, x + 1) == 0) {seg2.add(x, 1);}} else if (query == 2) {if (seg2.sum(x, x + 1) == 1) {seg2.add(x, -1);}} else if (query == 3) {seg1.add(x, 1);} else if (query == 4) {int r_ng = N;int r_ok = x;while (r_ng - r_ok > 1) {int m = (r_ng + r_ok) / 2;if (seg2.sum(x, m) < m - x) {r_ng = m;} else {r_ok = m;}}int l_ok = x;// [x, x)int l_ng = -1;while (l_ok - l_ng > 1) {int m = (l_ng + l_ok) / 2;if (seg2.sum(m, x) < x - m) {l_ng = m;} else {l_ok = m;}}System.out.println(seg1.sum(l_ok, r_ok + 1));}}}void tr(Object... objects) {System.out.println(Arrays.deepToString(objects));}}