樹狀陣列(暑假選拔)

2021-07-14 23:25:30 字數 824 閱讀 3973

某天小y家門前突然多出了兩座石塔,這兩座石塔妨礙了小x的出行,現在小x想要破壞這兩座石塔,假設兩座石塔分別由n1與n2塊石頭構成,每一塊石頭都有乙個破壞順序的優先順序,並且保證這兩座石塔中沒有兩塊優先順序一樣的石頭,小x覺得優先順序越高的石頭應該越早破壞掉,小x可以每次從任意一座石塔的塔頂移動一塊石頭到另外一座石塔的頂端,若此石頭是所有石頭中優先順序最高的,則可以直接將其破壞而無需移動,問要破壞掉所有石頭的最小移動次數是多少。

第一行包含兩個整數n1與n2,表示兩座石塔的石頭數,n1<=1e5,n2<=1e5

接下來n1行整數按照從頂到底的順序給出第一座石塔石頭的優先順序,數字越大優先順序越高

在接下來n2行按照同樣格式給出第二座石塔石頭的優先順序

優先順序範圍1到n1+n2 且無重複。

沒開64位wa了

#include#includeusing namespace std;

int n,a[2*100005]=,c[2*100005]=,loc[2*100005]=;

int lowbit(int x)

void xq(int pos)

}void add(int pos)

}int sum(int p)

return sum;

}int main()

pos=n1;

for(i=n1+1;i<=n1+n2;i++)

if(loc[n1+n2]>n1)loc[n1+n2+1]=n1+1;

for(i=n1+n2;i>0;i--)

printf("%i64d\n",ans);

return 0;

}

暑假 樹狀陣列 F Brainman

又是一道逆序數的問題。題意 給出乙個序列,每次只能交換相鄰的2個位置的數,問最少經過幾次交換可以使得序列遞增 思路 逆序對問題,求每個數後面有多少個數比它小 樹狀陣列 離散化 include include includeusing namespace std const int maxn 5000...

暑假 樹狀陣列 E Stars

題意 給出一些星星的橫座標和縱座標,而且星星的縱座標按非遞減排列,如果縱座標相等,則橫座標按遞增排列,任意兩顆星星不會重合。某一顆星星的level為 這顆星星的左下角 包括x相等但y小,y相等但x小 的星星個數。思路 設定乙個變數m標記它原始的位置,然後按x軸排序,每顆星星的level為 星星原始位...

暑假 樹狀陣列 I Japan

題意 在西邊有m座城市,東邊有n座城市,分別都是從北到南編號依次為1,2,3.n m 要建k條高速公路,每條高速公路分別從西邊的一座城市連線到東邊的一座城市。問 這些高速公路有多少個交叉點。的高速公路有2中情況,1 從西邊編號比x小的城市連線到東邊比y大的城市。2 從西邊 編號比x大的城市鏈結到東邊...