題目分析:
這道題用的rmq演算法(range maximum/minimum query) 。這裡做了幾點優化。
1)定義dpmax和dpmin時,為什麼17寫在前面,因為記憶體中資料是按行連續的存的,所以初始化dpmax[0]和dpmin[0]相關資料時,可以直接用memcpy。
2)所有的求2的方冪的操作都是用的位運算,這樣會比較快。在求比乙個數小的最大的二的方冪,也就是這個數的最左邊的1,沒有用庫函式。還沒有研究過到底哪個快,但感覺用庫函式可能不會比這個方式快吧?
#include#includeconst int n = 100001;
int arr[n];
//因為10^5約等於2^16.6
int dpmax[17][n];
int dpmin[17][n];
int getbit(unsigned int x)
return count;
}inline int max(const int a, const int b)
inline int min(const int a, const int b)
void rmq(int n)
} }}int main()
} return 0;
}
NYOJ 119士兵殺敵(三)
時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍統率著n個士兵,士兵分別編號為1 n,南將軍經常愛拿某一段編號內殺敵數最高的人與殺敵數最低的人進行比較,計算出兩個人的殺敵數差值,用這種方法一方面能鼓舞殺敵數高的人,另一方面也算是批評殺敵數低的人,起到了很好的效果。所以,...
nyoj119士兵殺敵(三)
時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍統率著n個士兵,士兵分別編號為1 n,南將軍經常愛拿某一段編號內殺敵數最高的人與殺敵數最低的人進行比較,計算出兩個人的殺敵數差值,用這種方法一方面能鼓舞殺敵數高的人,另一方面也算是批評殺敵數低的人,起到了很好的效果。所以,...
NYOJ 119 士兵殺敵(三)
士兵殺敵 三 時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍統率著n個士兵,士兵分別編號為1 n,南將軍經常愛拿某一段編號內殺敵數最高的人與殺敵數最低的人進行比較,計算出兩個人的殺敵數差值,用這種方法一方面能鼓舞殺敵數高的人,另一方面也算是批評殺敵數低的人,起到了很好...