time limit: 20 sec
memory limit: 128 mb
submit: 967
solved: 293 [
submit][
status][
discuss]
我早已習慣你不在身邊,
人間四月天 寂寞斷了弦。
回望身後藍天,
跟再見說再見……
某天,蒟蒻autumn發現了從 gty的妹子樹(bzoj3720) 上掉落下來了許多妹子,他發現
她們排成了乙個序列,每個妹子有乙個美麗度。
bakser神犇與他打算研究一下這個妹子序列,於是bakser神犇問道:"你知道區間
[l,r]中妹子們美麗度的逆序對數嗎?"
請你幫助一下autumn吧。
第一行包括乙個整數n(1<=n<=50000),表示數列a中的元素數。
第二行包括n個整數a1...an(ai>0,保證ai在int內)。
接下來一行包括乙個整數m(1<=m<=50000),表示詢問的個數。
接下來m行,每行包括2個整數l、r(1<=l<=r<=n),表示詢問al...ar中的逆序
對數(若ai>aj且i
l,r要分別異或上一次詢問的答案(lastans),最開始時lastans=0。
保證涉及的所有數在int內。
對每個詢問,單獨輸出一行,表示al...ar中的逆序對數。
41 4 2 3
12 4
2by autumn 分塊
+樹狀陣列
+可持久化線段樹
考慮分塊,f[i][j]表示第i塊的起始位置到第j個點的逆序對數,這個可以用樹狀陣列在o(n*sqrt(n)*logn)的複雜度預處理。
然後對於每次詢問,如果左右端點在同一塊內,樹狀陣列暴力計算。否則找到左端點後面第乙個完整的塊t,f[t][r]直接統計到答案裡,前面剩餘的部分,對於每乙個位置i,我們要求出[i+1,r]中小於a[i]的數的個數,可以用主席樹做。
#include#include#include#include#include#include#define f(i,j,n) for(int i=j;i<=n;i++)
#define d(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define pa pair#define maxn 50005
#define maxm 1000005
using namespace std;
int n,m,tot,cnt,ans,block,t;
int a[maxn],s[maxn],num[maxn],rt[maxn],f[250][maxn];
int ls[maxm],rs[maxm],sz[maxm];
pa b[maxn];
inline int read()
while (ch>='0'&&ch<='9')
return x*f;
}void add(int x,int y)
int sum(int x)
void insert(int x,int &y,int l,int r,int val)
int getans(int x,int y,int l,int r,int l,int r)
int query(int x,int y)
ret=f[num[x]+1][y];
f(i,x,num[x]*block) ret+=getans(rt[i],rt[y],1,tot,1,a[i]-1);
return ret;
}int main()
f(i,1,n) insert(rt[i-1],rt[i],1,tot,a[i]);
f(i,1,n) num[i]=(i-1)/block+1;
f(i,1,num[n])
}m=read();
f(i,1,m)
return 0;
}
BZOJ 3744 Gty的妹子序列
第一行包括乙個整數n 1 n 50000 表示數列a中的元素數。第二行包括n個整數a1 an ai 0,保證ai在int內 接下來一行包括乙個整數m 1 m 50000 表示詢問的個數。接下來m行,每行包括2個整數l r 1 l r n 表示詢問al ar中的逆序 對數 若ai aj且i 對每個詢問...
BZOJ3744 GTY的妹子序列
第一行包括乙個整數n 1 n 50000 表示數列a中的元素數。第二行包括n個整數a1.an ai 0,保證ai在int內 接下來一行包括乙個整數m 1 m 50000 表示詢問的個數。接下來m行,每行包括2個整數l r 1 l r n 表示詢問al.ar中的逆序 對數 若ai aj且i對每個詢問,...
bzoj3744 Gty的妹子序列
我早已習慣你不在身邊,人間四月天 寂寞斷了弦。回望身後藍天,跟再見說再見 某天,蒟蒻autumn發現了從 gty的妹子樹 bzoj3720 上掉落下來了許多妹子,他發現她們排成了乙個序列,每個妹子有乙個美麗度。bakser神犇與他打算研究一下這個妹子序列,於是bakser神犇問道 你知道區間 l,r...