4.
愚直に解く
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;
}
5.
クエリ (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 以下の要素数
を求めるクエリ
6.
クエリ処理の順番は自由
vの小さいクエリから処理
小さい順にxiをプロット
していくようにする
v以下の要素数を求める
ときには、v以下のxiし
か使われていない
i番目より前の要素の数に
ついての累積和をBITで
管理
2015/03
立命館大学競技プロブラミング合宿
Day3 F
6
v以下の要素数を求めるクエリ
i
xi