RUPC2016 2016/03/08
RUPC2016 Day3
D: Complex Oracle
1
原案:井上
解説:井上

問題文:井上
解答:青木・井上
RUPC2016 2016/03/08
問題概要
• 長さNの順列pが隠されている
• 2つの整数 l, r をサーバーに送ると、区間
[l, r]のコンプレックス度を教えてくれる
• コンプレックス度 := | { (i,j) | pi>pj か
つ l≤i<j≤r} |
• 200,000回以内のクエリで隠された順列pを当
てろ
• 制約: 1≤N≤100,000
2
RUPC2016 2016/03/08
問題概要
• 長さNの順列pが隠されている
• 2つの整数 l, r をサーバーに送ると、区間
[l, r]のコンプレックス度を教えてくれる
• コンプレックス度 := | { (i,j) | pi>pj か
つ l≤i<j≤r} |

= 転倒数 (=バブルソートの交換回数)
• 200,000回以内のクエリで隠された順列pを当
てろ
• 制約: 1≤N≤100,000
3
RUPC2016 2016/03/08
解法のアイデア
• inv(l,r) = | { (i,j) | pi>pj かつ l≤i<j≤r} |
とする
• inv(l,r) - inv(l+1, r) から、lより右にpl よ
り小さい値がいくつあるかわかる

→ p[l,N] のみの順列での何番目かがわかる
4
6 4 1 3 5 2
1
2
2 3 1
2番目
RUPC2016 2016/03/08
TLE解法
• p[l,N] のみの順列での何番目かがわかる
• 後ろから更新、p[x]がp[x,N]でk番目なら、
• p[x+1,N]で k≤p[y] であるp[y]を1増やす
• p[x] = k とする
• クエリN-1回、ナイーブに更新するとO(N2)でTLE
5
? ? ? 2 3 1
2
4
2 3 4 1
2番目 +1 +1
RUPC2016 2016/03/08
想定解法
• p[l,N] のみの順列での何番目かがわかる
• 逆に、前から考えると、まだ使ってない数字で

k番目のものを使えばOK
• 平衡二分木やセグメントツリーなどを使ってこ
のクエリをO(logN)で処理して、全体 O(NlogN)
• クエリN-1回
6
4 3 ? ? ? ?
3番目
候補: {1,2,5,6}
4 3 5 ? ? ?
RUPC2016 2016/03/08
セグメントツリーを使う方法
• セグメントツリーについては蟻本等を参照
• k番目の要素をとるため、区間和を管理する
• k<=sumなら左に降る
• 違うなら k = k - sum として右に降る
7
1 0 1 1 0 1 0 0候補: {1,3,4,6}
0121
13
4k=3
RUPC2016 2016/03/08
セグメントツリーを使う方法
• セグメントツリーについては蟻本等を参照
• k番目の要素をとるため、区間和を管理する
• k<=sumなら左に降る
• 違うなら k = k - sum として右に降る
8
1 0 1 1 0 1 0 0候補: {1,3,4,6}
0121
13
4
k=3
RUPC2016 2016/03/08
セグメントツリーを使う方法
• セグメントツリーについては蟻本等を参照
• k番目の要素をとるため、区間和を管理する
• k<=sumなら左に降る
• 違うなら k = k - sum として右に降る
9
1 0 1 1 0 1 0 0候補: {1,3,4,6}
0121
13
4
k=2
RUPC2016 2016/03/08
セグメントツリーを使う方法
• セグメントツリーについては蟻本等を参照
• k番目の要素をとるため、区間和を管理する
• k<=sumなら左に降る
• 違うなら k = k - sum として右に降る
10
1 0 1 1 0 1 0 0候補: {1,3,4,6}
0121
13
4
RUPC2016 2016/03/08
想定解法2
• p[x,N] のみの順列での何番目かがわかる
• 逆方向にも同様のクエリを投げると、p[1,x] での
(降順での) 何番目かがわかる
• x-1個のうちk個が自分より大きい → 自分はx-k
番目
• 左右に自分より小さい要素がそれぞれa,b個

→ 自分は全体でa+b+1番目 → p[x] = a+b+1
• クエリ2N-2回、O(N)
11
? ? ? ? ? ?
前から1番目
RUPC2016 2016/03/08
ジャッジ解
• 青木 (Java, O(N)): 59行 1886B
• 井上 (C++, O(N)): 44行 781B
• 井上 (C++, O(NlogN)): 71行 1308B
12
RUPC2016 2016/03/08
回答状況
• Accept / Submit
• 15 / 47 (31.91%)
• First Acceptance
• onsite: popnow (00:56)
• online: rickytheta (00:33)
13

More Related Content

PDF
公開鍵暗号(1): RSA暗号
PDF
PFDS 8.4.3 Real-Time Deques
PDF
Lisperはじめました
PPTX
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
PDF
Erlang で再帰
PDF
Lisper はじめました (再)
PDF
並列対決 Elixir × Go × C# x Scala , Node.js
公開鍵暗号(1): RSA暗号
PFDS 8.4.3 Real-Time Deques
Lisperはじめました
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Erlang で再帰
Lisper はじめました (再)
並列対決 Elixir × Go × C# x Scala , Node.js

What's hot (20)

PDF
整数格子点上の劣モジュラ被覆に対する高速アルゴリズム
PDF
Chainerで流体計算
PDF
Rでisomap(多様体学習のはなし)
PDF
CMSI計算科学技術特論B(10) 大規模MD並列化の技術1
PDF
Icp3.2 takmin
PDF
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
PPTX
FeaStNet: Feature-Steered Graph Convolutions for 3D Shape Analysis
PDF
Snake eats leapfrog (in Japanese)
PDF
CMSI計算科学技術特論B(11) 大規模MD並列化の技術2
PDF
20130626 kawasaki.rb NKT77
PDF
ウェーブレット木の世界
PDF
20140306 ibisml
PDF
[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
PDF
低ランク行列補完のためのマトロイド理論
PDF
強化学習の汎用化Ros
PPTX
Graph convolution (スペクトルアプローチ)
PPTX
Ecma 262 5th Edition を読む #5 第9条
PPTX
Coursera machine learning week7: Support Vector Machines
PDF
Sort
整数格子点上の劣モジュラ被覆に対する高速アルゴリズム
Chainerで流体計算
Rでisomap(多様体学習のはなし)
CMSI計算科学技術特論B(10) 大規模MD並列化の技術1
Icp3.2 takmin
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
FeaStNet: Feature-Steered Graph Convolutions for 3D Shape Analysis
Snake eats leapfrog (in Japanese)
CMSI計算科学技術特論B(11) 大規模MD並列化の技術2
20130626 kawasaki.rb NKT77
ウェーブレット木の世界
20140306 ibisml
[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
低ランク行列補完のためのマトロイド理論
強化学習の汎用化Ros
Graph convolution (スペクトルアプローチ)
Ecma 262 5th Edition を読む #5 第9条
Coursera machine learning week7: Support Vector Machines
Sort
Ad

Viewers also liked (6)

PPTX
Государственные закупки для предпринимателей
Государственные закупки для предпринимателей
Ad

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

PDF
ACPC 2017 Day3 F: 掛け算は楽しい
PDF
ACPC 2019 Day3 F: 部分文字列分解
PDF
ACPC 2019 Day3 E: 総和の切り取り
PDF
HUPC 2019 Day1 F: グリッドの番号
PDF
HUPC 2019 Day1 E: 最短経路の復元
PDF
PDF
プログラミングコンテスト基礎テクニック
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 E: 総和の切り取り
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 E: 最短経路の復元
プログラミングコンテスト基礎テクニック

立命合宿2016Day3:D問題