結果
問題 |
No.3265 地元に帰れば天才扱い!
|
ユーザー |
|
提出日時 | 2025-09-08 21:58:07 |
言語 | Crystal (1.14.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,988 bytes |
コンパイル時間 | 15,433 ms |
コンパイル使用メモリ | 311,536 KB |
実行使用メモリ | 14,020 KB |
最終ジャッジ日時 | 2025-09-08 21:58:27 |
合計ジャッジ時間 | 18,034 ms |
ジャッジサーバーID (参考情報) |
judge / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | RE * 4 |
other | RE * 21 |
ソースコード
n, m = gets.not_nil!.split.map(&.to_i) segtree0 = Array.new(2 * m, 0_i64) segtree1 = Array.new(2 * m, 0_i64) a = Array.new(n, 0_i64) l_arr = Array.new(n, 0) r_arr = Array.new(n, 0) c_arr = Array.new(n, 0) res = 0_i64 n.times do |i| input = gets.not_nil!.split.map(&.to_i) a[i] = input[0].to_i64 l_arr[i] = input[1] - 1 r_arr[i] = input[2] segtree1[m + i] = a[i] res += (r_arr[i] - l_arr[i]) * a[i] c_arr[i] = i l = m + l_arr[i] r = m + r_arr[i] while l < r if l.odd? segtree0[l] += 1 l += 1 end if r.odd? r -= 1 segtree0[r] += 1 end l //= 2 r //= 2 end end (m - 1).downto(1) do |i| segtree1[i] = segtree1[i << 1] + segtree1[(i << 1) | 1] end n.times do |i| l = m + l_arr[i] r = m + r_arr[i] while l < r if l.odd? res -= segtree1[l] l += 1 end if r.odd? r -= 1 res -= segtree1[r] end l //= 2 r //= 2 end end q = gets.not_nil!.to_i q.times do input = gets.not_nil!.split.map(&.to_i) i = input[0] - 1 res -= (r_arr[i] - l_arr[i]) * a[i] pos = m + c_arr[i] while pos > 0 res += segtree0[pos] * a[i] segtree1[pos] -= a[i] pos //= 2 end l = m + l_arr[i] r = m + r_arr[i] while l < r if l.odd? segtree0[l] -= 1 res += segtree1[l] l += 1 end if r.odd? r -= 1 segtree0[r] -= 1 res += segtree1[r] end l //= 2 r //= 2 end input = gets.not_nil!.split.map(&.to_i) c_arr[i] = input[0] - 1 l_arr[i] = input[1] - 1 r_arr[i] = input[2] res += (r_arr[i] - l_arr[i]) * a[i] pos = m + c_arr[i] while pos > 0 res -= segtree0[pos] * a[i] segtree1[pos] += a[i] pos //= 2 end l = m + l_arr[i] r = m + r_arr[i] while l < r if l.odd? segtree0[l] += 1 res -= segtree1[l] l += 1 end if r.odd? r -= 1 segtree0[r] += 1 res -= segtree1[r] end l //= 2 r //= 2 end puts res end