有沒有辦法讓 Q 不同的更新如下:
v[start] = v[start] 1;
v[start 1] = v[start 1] 2;
v[start 2] = v[start 2] 3
等等..到位置結束
v[end] = v[end] end - start 1
在 O(N Q) 中?
我的意思是類似差異陣列的東西。你能幫我么?
如果有幫助,該陣列最初僅為 0。
說明:
N = 陣列大小
Q = 更新次數
所有更新都有不同的開始和結束索引,我不需要在更新之間訪問陣列的任何元素。我只在每次更新后才需要它們。
uj5u.com熱心網友回復:
哎呀,我把這個問題讀為
v[start] = v[start] 1;
v[start 1] = v[start] 2;
v[start 2] = v[start 1] 3
這聽起來像是掃描方法的作業(例如與 Haskell 的比較scanl),例如std::transform_exclusive_scan:
#include <iostream>
#include <iterator>
#include <numeric>
#include <vector>
int main() {
std::vector v{0, 0, 0, 0};
int value_increment = 1;
std::transform_inclusive_scan(
v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "),
std::plus<int>{},
[&value_increment](int x) { return x value_increment ; });
// 1 3 6 10
}
uj5u.com熱心網友回復:
您正在以類似的方式更改范圍內的每個成員,std::transform您想要的也是如此。唯一有點棘手的是每次都會增加一個額外的變數。(示例未編譯或測驗)
int i = 0;
std::transform(std::begin(v), std::end(v), std::begin(v),
[&](int e) { return e ( i); });
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/344380.html
上一篇:查找重復的單詞
