SlideShare a Scribd company logo
1 of 8
Download to read offline
RUPC2016 2016/03/08
RUPC2016 Day3
H: われわれの努力について
1
原案:井上
解説:井上

問題文:井上
解答:井上
RUPC2016 2016/03/08
問題概要
• 長さNの順列pが与えられる
• Q個のクエリ li, ri が与えられるので、それ
ぞれについて inv(li,ri) を答えよ
• inv(l,r) := | { (i,j) | pi>pj かつ
l≤i<j≤r} |
• 制約: 1≤N≤100,000, 1≤Q≤200,000
2
RUPC2016 2016/03/08
問題背景
• D問題原案提出時の僕

「こんなんセグ木とかでちょちょいと

やればO(logN) でクエリ答えられるやろ」
• RUPC1週間前の僕

「えっ、これむずない?」
3
RUPC2016 2016/03/08
解法のアイデア
• 「転倒数 クエリ」検索

↓
• 今日の典型データ構造(解答編) - よすぽの日記
• http://yosupo.hatenablog.com/entry/
2015/03/31/000740
• これはbit列の話
4
RUPC2016 2016/03/08
解法のアイデア
• IJPC 2012 #1: 魔法の訓練
• http://japl.pl/contest/ijpc/1/reviews/
training.html
• 転倒数クエリに答える問題
• この問題では値の変更もある
• O( (N+Q) √N logN ) 解法が書かれている
• 平方分割 + BIT + 転倒数を数えるルーチン
• JAPLJ is GOD
5
RUPC2016 2016/03/08
われわれのつらみ
• O( (N+Q) √N logN ) 解法を実装する
• ゆうてね、O(√N logN) はね、遅いよね
• D問題のジャッジに組み込むが、クエリが律速
になってNを大きくできない

→ O(N2) がTLEしない……
6
RUPC2016 2016/03/08
われわれの努力
• 「inversion range query」検索
• stack overflow がヒット
• http://stackoverflow.com/questions/
21763392/counting-inversions-in-ranges
• 神によりO( N+Q √N ) 解法が提案されている
• 平方分割内の計算を頑張ってlogを落とす
• radix sort + merge sort でlogを落とす
7
RUPC2016 2016/03/08
われわれの本当の努力
• 平方分割サイズの調整
• 配列を使い回してメモリ削減
• 事前計算できるとこを計算する (N<Qなので)
• できるだけ long long を使わない
• 小さいケース (長さは<=600くらい) だと僕が
下手な radix sort 書くより std::sort の方
が速いのでそれを使う
8

More Related Content

More from HCPC: 北海道大学競技プログラミングサークル

More from HCPC: 北海道大学競技プログラミングサークル (20)

ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しいACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しい
 
ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断
 
ACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFSACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFS
 
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解
 
ACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取りACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取り
 
ACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェ
 
ACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探しACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探し
 
HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木
 
HUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャムHUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャム
 
HUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMGHUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMG
 
HUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD RushHUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD Rush
 
HUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺しHUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺し
 
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号
 
HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元
 
HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?
 
HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価
 
HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍
 
HUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four teaHUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four tea
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
プログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニックプログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニック
 

立命合宿2016Day3:H問題