通過分析可得乙個點它最右邊的位置就是他現在的位置加上他後面的比他小的數字的個數。
乙個點最左邊的位置就是他開始的位置或者排完序以後的位置min(i,num[i]);
用陣列陣列從後往前可以巧妙的維護乙個點後面符合條件的點有多少個,具體看**。
#include#include#includeusing namespace std;
const int maxn = 100005;
int n;
int num[maxn];
int tree[maxn];
int ans[maxn];
int lowbit(int i)
void add(int i,int x)
}int query(int i)
return sum;
}int main()
printf("case #%d:",t++);
for(int i=1;i<=n;i++) printf(" %d",ans[i]); printf("\n");
}return 0;
}
HDU 5775 樹狀陣列
題意 給出乙個序列,求每乙個數字在氣泡排序中出現的最大最小下標差。從小到大考慮每乙個陣列,乙個數字右邊有多少個比他大的數字就是他右移的數量。用樹狀陣列維護下就好了。include include include include include using namespace std define m...
hdu5775樹狀陣列
考慮乙個位置上的數字c在氣泡排序過程的變化情況。c會被其後面比c小的數字各交換一次,之後c就會只向前移動。陣列從右向左掃,樹狀陣列維護一下得到每個值右邊有多少個比其小的值,加上原位置得到最右位置,最左位置為初始位置和最終位置的最小值。include include include include u...
HDU 4777 思維 樹狀陣列
題意 一些數,一些詢問。詢問一段區間內,和其他數都互質的數有幾個。注意1和所有數包括1本身互質。思路 基本參照 首先乙個樸素的想法是暴力。然後就想到應該離線處理所有的詢問。關鍵是對於乙個詢問,怎麼知道在這個區間內乙個數有沒有對答案做出貢獻。模擬賽的時候想到這裡也就想不下去了,因為感覺可能和質因數分解...