diff --git "a/khj20006/202510/16 BOJ P1 \354\210\230\354\227\264\352\263\274 \354\277\274\353\246\254 23.md" "b/khj20006/202510/16 BOJ P1 \354\210\230\354\227\264\352\263\274 \354\277\274\353\246\254 23.md" new file mode 100644 index 00000000..47ec3eb0 --- /dev/null +++ "b/khj20006/202510/16 BOJ P1 \354\210\230\354\227\264\352\263\274 \354\277\274\353\246\254 23.md" @@ -0,0 +1,65 @@ +```cpp +#include +using namespace std; +using ll = long long; + +int N, Q, a[100000]{}, sq; +ll fen[100001]{}, ans[100000]{}; +map m; +vector> qs; + +void upt(int i, int v) { + for(;i<100001;i+=i&-i) fen[i] += v; +} + +ll f(int i) { + ll ret = 0; + for(;i>0;i-=i&-i) ret += fen[i]; + return ret; +} + +int main(){ + cin.tie(0)->sync_with_stdio(0); + + cin>>N>>Q; + sq = sqrt(N); + for(int i=0;i>a[i], m[a[i]] = 0; + int c = 0; + for(auto &[x,y]:m) y = ++c; + for(int i=0;i>a>>b, a--, b--, x = t++; + sort(qs.begin(), qs.end(), [](auto a, auto b) -> bool { + auto [al, ar, ax] = a; + auto [bl, br, bx] = b; + if(al/sq == bl/sq) return ar < br; + return al/sq < bl/sq; + }); + + int l = 0, r = -1; + ll res = 0; + for(auto [pl,pr,x]:qs) { + while(r < pr) { + res += f(c) - f(a[++r]); + upt(a[r],1); + } + while(pr < r) { + res -= f(c) - f(a[r]); + upt(a[r--],-1); + } + while(l < pl) { + res -= f(a[l]-1); + upt(a[l++],-1); + } + while(pl < l) { + res += f(a[--l]-1); + upt(a[l],1); + } + ans[x] = res; + } + for(int i=0;i