題意:給出乙個序列,求每乙個數字在氣泡排序中出現的最大最小下標差。
從小到大考慮每乙個陣列,乙個數字右邊有多少個比他大的數字就是他右移的數量。用樹狀陣列維護下就好了。
#include
#include
#include
#include
#include
using
namespace
std;
#define maxn 100005
int c[maxn], pre[maxn];
struct node
} a[maxn];
int n;
int l[maxn], r[maxn];
int lowbit (int x)
void add (int x)
}int query (int x)
return ans;
}int main ()
printf ("case #%d: ", ++kase);
sort (a+1, a+1+n);
memset (c, 0, sizeof c);
for (int i = 1; i <= n; i++)
for (int i = 1; i <= n; i++)
}return
0;}
hdu5775樹狀陣列
考慮乙個位置上的數字c在氣泡排序過程的變化情況。c會被其後面比c小的數字各交換一次,之後c就會只向前移動。陣列從右向左掃,樹狀陣列維護一下得到每個值右邊有多少個比其小的值,加上原位置得到最右位置,最左位置為初始位置和最終位置的最小值。include include include include u...
hdu5775 思維題 樹狀陣列
通過分析可得乙個點它最右邊的位置就是他現在的位置加上他後面的比他小的數字的個數。乙個點最左邊的位置就是他開始的位置或者排完序以後的位置min i,num i 用陣列陣列從後往前可以巧妙的維護乙個點後面符合條件的點有多少個,具體看 include include includeusing namesp...
hdu 3887 樹狀陣列
給你一棵樹,每個節點都有個編號。讓你求乙個節點他的子樹中編號比他小的節點有幾個。編號唯一,從1 n,已給出根節點 解 樹狀陣列統計。轉化為線性序列。可以想到的是,若要統計乙個節點,那麼比它小的孩子必須先插完,然後統計就行了。對於乙個節點i來說,只要把所有x那麼對於所有節點來說也是這樣的,從一開始插,...