洛谷 P3948 資料結構(差分陣列)

2021-09-27 03:36:46 字數 1123 閱讀 4808

題意:

開始每個陣列的元素都是0

給出n . opt, mod, min, max, mod在int內

操作 a, q

a:l, r, x 吧 [ l, r ]    這個區間內每個元素+ x

q:l, r 詢問 [l, r] 這個區間中元素滿足 

min <= (t * i % mod) <= max 的t這樣的數的個數 

(i是陣列下標) 

在給出乙個final值,表示有final 個查詢

[ l, r ] 表示 詢問區間 [l, r] 之間滿足條件的個數 

思路:資料範圍:n 8e4,  opt 1e6, final 1e7, q <= 1e3

時間1s

那麼a的操作就是 1e6 -1e3  = 差不多還是1e6

操作過後直接 字首陣列  o(n) 求一下然後就是 final操作了 

1)如果用線段樹 時間就是  o(log(2)8e4 * 1e6 + log(2)8e4 * 1e7) 

2)用差分陣列  o(1e3 * n + 1e6 + n + final) 

ac:

#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn = 1e5;

ll n, opt, mod, min, max, final;

ll f[maxn];

ll pre[maxn];

ll solve(int l, int r)

ll ans = 0;

ll tmp;

for (int i = l; i <= r; ++i)

} return ans;

}void bulid()

pre[i] = pre[i - 1] + flag; }}

int main()

if(ch[0] == 'q')

} scanf("%lld", &final);

bulid();

for(int i = 1; i <= final; ++i)

return 0;

}

洛谷 P3948 資料結構 (差分陣列)

直接差分陣列搞一搞就ok了。因為前面的查詢和修改摻雜在一起的詢問很少,所以對於那些詢問我們暴力去查詢就ok。在final詢問之前求乙個符合要求的字首和就可以o 1 輸出了。include using namespace std const int maxn 8e4 5 typedef long lo...

洛谷 P3948 資料結構 差分陣列

題目看起來很麻煩,其實就是區間修改和區間查詢,這裡我用的是差分陣列寫的,線段樹應該也可以寫吧,對於剛開始的opt次詢問,可以直接暴力求滿足條件的個數,然後在後面的final次詢問之前我們對差分陣列求乙個字首和,記錄一下所有滿足條件的個數的字首和,然後o 1 去輸出就好了。ac include def...

洛谷P3948 資料結構 題解

題目傳送 感覺這道題秀了我一地的智商。審題沒審好,沒確定帶修改的操作中詢問的次數 1000,且max和min都是事先給好 不變的。想了半天線段樹 分塊,卻忘了最基礎的暴力。寫不出題時先寫暴力。離線部分 顯然不能暴力處理詢問了,但是沒有修改,又是區間詢問個數,自然要想到字首和優化了。設sum i 為前...