RUPC 2016 day3 D: Complex Oracle

http://judge.u-aizu.ac.jp/onlinejudge/cdescription.jsp?cid=RitsCamp16Day3&pid=D

解法

[l,r] と書いたら区間 [l,r] に対するクエリ結果と表すものとする。

[1,i] と [i,n] の結果をすべて求めておく。

i よりも左側にある a[i] より大きい要素の個数は [1,i]-[1,i-1] で求まる。 このことから a[i] より小さい要素の個数は i-1-([1,i]-[1,i-1]) であることが分かる。

i よりも右側にある a[i] より小さいの要素の個数は [i,n]-[i+1,n] で求まる。

  • a[i] = (a[i] より小さい要素の個数)+1

なので、これで全ての a[i] が求められる。

RUPC 2016 day3 D: Complex Oracle

転倒数だったらしい。気が付かなかった。