f editorial

8
原案:井上 解答:井上・鈴木 解説:青木 2015/03 立命館大学競技プロブラミング合宿 Day3 F 1

Upload: hcpchokudai

Post on 11-Aug-2015

29 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: F editorial

原案:井上

解答:井上・鈴木

解説:青木

2015/03 立命館大学競技プロブラミング合宿Day3 F

1

Page 2: F editorial

長さ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

Page 3: F editorial

2015/03 立命館大学競技プロブラミング合宿Day3 F

3

問題概要

l r

e

e

外れ値

i

xi

3つ

Page 4: F editorial

愚直に解く

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; }

Page 5: F editorial

クエリ (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 以下の要素数を求めるクエリ

Page 6: F editorial

クエリ処理の順番は自由

vの小さいクエリから処理

小さい順にxiをプロットしていくようにする

v以下の要素数を求めるときには、v以下のxiしか使われていない

i番目より前の要素の数についての累積和をBITで管理

2015/03 立命館大学競技プロブラミング合宿Day3 F

6

v以下の要素数を求めるクエリ

i

xi

Page 7: F editorial

井上(c++):85行

鈴木(c++):97行

2015/03 立命館大学競技プロブラミング合宿Day3 F

7

Writer解

Page 8: F editorial

First Accept

on-line: snukeさん (00:29)

on-site: iidxさん(01:14)

正答率 14/27 (51.85%)

2015/03 立命館大学競技プロブラミング合宿Day3 F

8

提出状況