用c[i]來表示[i-lowbit(i)+1,i]區間內有多少個位置,接著二分查詢num[i]+1的位置,接著在相關區間內減去乙個位置(這步尤為重要,關乎前面能否查詢到正確的位置)。
//
// main.cpp
// richard
//// created by 邵金傑 on 16/8/20.
//#include#include#includeusing namespace std;
const int maxn=50000;
int c[maxn],num[maxn],ans[maxn];
int n;
void add(int i,int x)
}int sum(int p)
return s;
}int binary_search(int x)
return r;
}int main()
for(int i=1;i<=n;i++)
printf("%d\n",ans[i]);
}return 0;
}
poj 2182 單點修改
題意 有n頭牛,標號從1到n,現在牛排成乙個佇列,知道每個牛的前面比自己標號小的牛的數量,輸出每個牛的標號。題解 給出的序列的最後乙個數字是可以推出的,然後把這個數字拿走,又能知道前面有幾個數字,和之前做過的有幾個空位乙個道理,維護線段樹區間解決。include include include us...
poj 2182 樹狀陣列
這題對於o n 2 的演算法有很多,我這隨便貼乙個爛的,跑了375ms。include include using namespace std int mat 8008 int main for i 0 i printf d n mat i return0 view code 還是來看樹狀陣列的解法...
樹狀陣列 POJ 2132 Lost Cows
給定每頭牛前面有幾頭牛比它高,求出所有牛的最小身高 整數 用乙個陣列b i b i 一開始全都是1,每次查詢第ai 1a i 1個1即為每頭牛的身高,之後再把對應的位置佔掉 可以用樹狀陣列 二分查詢對應的位置,當然也可以用倍增 樹狀陣列快速求得 include include include usi...