POJ 2182 Lost Cows(樹狀陣列)

2021-07-17 00:12:03 字數 564 閱讀 7824

用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...