COGS 2632 數列操作d

2021-08-29 16:21:40 字數 2559 閱讀 8672

傳送門

題目描述:

乙個長度為 n

nn 的序列,一開始序列數的權值都是 0

00,有 m

mm 次操作

支援兩種操作:

1 11l

llrrrx

xx,給區間 [ l

ll , r

rr ] 內位置為 pos

pospo

s 的數加上 (po

s−l)

∗x

(pos-l)*x

(pos−l

)∗x000l

llr

rr,查詢區間 [ l

ll , r

rr ] 內的權值和

最終答案對 109

+7

10^9+7

109+

7 取模。

輸入格式:

第一行兩個數 n

nn,m

mm,表示序列長度和操作次數

接下來 m

mm 行,每行描述乙個操作,有如下兩種情況:

1 11l

llrrrx

xx,給區間 [ l

ll , r

rr ] 內位置為 pos

pospo

s 的數加上 (po

s−l)

∗x

(pos-l)*x

(pos−l

)∗x000l

llr

rr,查詢區間 [ l

ll , r

rr ] 內的權值和

輸出格式:

每乙個 0

00 操作輸出乙個整數模 109

+7

10^9+7

109+7

樣例資料:輸入

5 50 2 3

1 4 5 1

1 1 5 5

0 1 4

0 2 3 輸出

03015

【資料範圍】

對於 30

%30\%

30% 的資料 n,m

n,mn,

m ≤ 2000

2000

2000

對於 100

%100\%

100%

的資料,n,m

n,mn,

m ≤ 300000

300000

300000

保證讀入的都是非負整數,所有的 x

xx ≤ 10000

10000

1000

0相當於是區間加上乙個等差數列吧

除了維護區間和之外,我們還需要維護每個區間的等差數列的首項和公差

由於是等差數列,用線段樹很好合併,首項和公差就直接相加,的話套公式求和就可以了

然後其他的就是線段樹基礎操作了

#include

#include

#include

#define n 300005

#define mod 1000000007

using

namespace std;

int n,m,l,r,x;

int sum[n<<2]

,begin[n<<2]

,num[n<<2]

;void

add(

int root,

int l,

int r,

int val,

int start)

void

pushdown

(int root,

int l,

int r,

int mid)

}void

modify

(int root,

int l,

int r,

int x,

int y,

int k)

int mid=

(l+r)

>>1;

pushdown

(root,l,r,mid);if

(x<=mid)

modify

(root<<

1,l,mid,x,y,k);if

(y>mid)

modify

(root<<1|

1,mid+

1,r,x,y,k)

; sum[root]

=(sum[root<<1]

+sum[root<<1|

1])%mod;

}int

query

(int root,

int l,

int r,

int x,

int y)

intmain()

fclose

(stdin);

fclose

(stdout);

return0;

}

COGS 2964 數列操作

傳送門 題目描述 給定長度均為 n nn 的數列 a,b a,ba,b,其中 b bb 數列為 1 11 n nn 的全排列,a aa 數列全為 000。你需要支援 q qq 次操作,操作分為 add addad d 和 que ry query quer y 兩種。其中 x x x 表示對 x x...

COGS2638 數列操作

給定乙個數列a,你需要支援的操作 區間and,區間or,詢問區間最大值 一行兩個整數n,m,表示數列長度和操作個數。接下來一行有n個整數,第i個數表示ai。接下來m行,每一行均為以下三種操作中的一種 1 l r val ai ai and val l i r 2 l r val ai ai or v...

cogs240 數列操作 線段樹

問題描述 假設有一列數 1 i n 支援如下兩種操作 1 將 ak 的值加 d k,d 是輸入的數 2 輸出 as as 1 at s,t 都是輸入的數,s t 根據操作要求進行正確操作並輸出結果。輸入格式 輸入檔案第一行乙個整數n 0 n 100000 第二行為 n 個整數,表示 的初始值。第三行...