f editorial
TRANSCRIPT
原案:井上
解答:井上・鈴木
解説:青木
2015/03 立命館大学競技プロブラミング合宿Day3 F
1
長さDの整数列 x_1, x_2, …, x_Dが与えられる 1 <= D <= 10^5 -10^8 <= xj <= 10^8
クエリ(li, ri, ei)にQ回答える 1 <= Q <= 10^5 1 <= li <= ri <= D 0 <= ei <= 10^8
クエリ ai = min(x_li, x_ri), bi = max(x_li, x_ri) x_j < ai – ei または bi + ei < x_j を満たすような j の個数を返す
li <= j <= rj
問題概要
2015/03 立命館大学競技プロブラミング合宿Day3 F
2
2015/03 立命館大学競技プロブラミング合宿Day3 F
3
問題概要
l r
e
e
外れ値
i
xi
3つ
愚直に解く
2015/03 立命館大学競技プロブラミング合宿Day3 F
4
想定誤解法
for (int i=0; i<Q; i++) { cin >> l >> r >> e; int L = min(x[l], x[r]) – e; int U = max(x[l], x[r]) + e; int res = 0; for (int j=l; j<=r; j++) if (x[j] < L || U < x[j]) res ++; cout << res << endl; }
クエリ (l, r, e)
2015/03 立命館大学競技プロブラミング合宿Day3 F
5
l r
i
L = min(x[l], x[r]) – e; U = max(x[l], x[r]) + e;
L
U
Lより小さい要素とUより大きい要素を数える
範囲内の全体の要素数から、L以上U以下の要素を除くと求まる
U以下の要素数から、Lより小さい要素数を除くとも求まる
L以上U以下の要素数
クエリ (l, r, e)
区間[a : b]中の値 v 以下の要素数を求めるクエリ
クエリ処理の順番は自由
vの小さいクエリから処理
小さい順にxiをプロットしていくようにする
v以下の要素数を求めるときには、v以下のxiしか使われていない
i番目より前の要素の数についての累積和をBITで管理
2015/03 立命館大学競技プロブラミング合宿Day3 F
6
v以下の要素数を求めるクエリ
i
xi
井上(c++):85行
鈴木(c++):97行
2015/03 立命館大学競技プロブラミング合宿Day3 F
7
Writer解
First Accept
on-line: snukeさん (00:29)
on-site: iidxさん(01:14)
正答率 14/27 (51.85%)
2015/03 立命館大学競技プロブラミング合宿Day3 F
8
提出状況