其實,我也知道這道題是求逆序數來做的,
但是問題來了,怎麼求逆序數,常規的解法肯定是不行的,因為資料量很大,
那麼想到能用線段樹來做,是可以的,不過我還沒敲過,既然在看樹狀陣列就用這個做。
又因為資料可以達到一百萬,並且資料又用不到,所以可以對資料進行離散化
#include #include #include using namespace std;
#define size 1000001
struct node
list[size];
int c[size];
int num[size];
int cmp(node a,node b)
inline int lowbite(int x)
void add(int k,int n)
}int sum(int k)
return s;
}int main()
sort(list+1,list+1+n,cmp);
for(i=1;i<=n;i++)//實現離散化,因為之前已經排過序,所以直接賦值i就算離散化了
ans = 0;
for(i=1;i<=n;i++)
printf("%i64d\n",ans);
} return 0;
}
hdu 3743 樹狀陣列
思路 我們只需堅守乙個原則,本來就在左邊的堅決不把它換到右邊。也就是相鄰的兩個數,左邊小,右邊大,那麼就不調換。這樣對每個數,只要統計左邊比它大的數的個數。可以從後面開始用樹狀陣列統計比它小的數的個數是一樣的。include include include include define maxn 1...
hdu 5877(樹狀陣列 離散化)
題意 查詢節點與它的父親節點相乘小於k的種類數。思路 用乙個樹狀陣列維護,查詢的話就是它的父親節點小於k a i 的個數。當跑完這個分支之後,要對他進行清除操作。ps 數比較大,需要離散化。include include include include include include include...
離散化 樹狀陣列
題目描述 erwin最近對一種叫 thair 的東西巨感興趣。在含有n個整數的序列a1,a2 an中,三個數被稱作 thair 當且僅當i求乙個序列中 thair 的個數。輸入格式 開始乙個正整數n,以後n個數a1 an。輸出格式 thair 的個數 思路 列舉中間的數字,求排在它前面,小於它的有幾...