COGS 2964 數列操作

2021-08-29 20:53:51 字數 3152 閱讀 9777

傳送門

題目描述:

給定長度均為 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

xx 向下取整。

輸入格式:

第一行有兩個整數 n,q

n,qn,

q,nn

n 表示 a,b

a,ba,

b 數列長度,q

qq 表示操作次數

接下來一行 n

nn 個整數,表示 b

bb 數列

接下來 q

qq 行,每行表示 add

addad

d 或 que

ry

query

quer

y 操作

輸出格式:

對於每乙個 que

ry

query

quer

y 操作,輸出一行整數表示對應的答案

樣例資料:輸入

5 12

1 5 2 4 3

add 1 4

query 1 4

add 2 5

query 2 5

add 3 5

query 1 5

add 2 4

query 1 4

add 2 5

query 2 5

add 2 2

query 1 5 輸出

1124

46

對於 100

%100\%

100%

的資料,n,q

≤100000

n,q≤100000

n,q≤10

0000

,1 ≤l

,r≤n

1≤l,r≤n

1≤l,r≤

n。保證 b

bb 數列是 [ 1

11 , n

nn ] 的全排列

我們用線段樹來做這道題,對於每個區間都維護一下 bi−

ai%b

ib_i-a_i\%b_i

bi​−ai

​%bi

​ 的最小值(設為 num

numnu

m)其實 num

numnu

m 也可以粗略地理解成第 i

ii 位還要加上 num

inum_i

numi

​ 個數才能使答案再增加 111

然後分以下兩種情況來統計:

n um

>

1num>1

num>

1,那麼這時區間加 1

11 不會對答案有貢獻,直接 num

−1

num-1

num−

1 即可

否則,就遞迴到 num

=1

num=1

num=

1 的點,此時它肯定對答案有 1

11 的貢獻,加上後更新 num

=b

inum=b_i

num=bi

​ 即可

由於統計答案時沒有修改操作,所以我們可以直接用樹狀陣列統計答案

#include

#include

#include

#define n 100005

#define lowbit(x) x&-x

using

namespace std;

char s[10]

;int n,q,num[n]

,bit[n]

;int min[n<<2]

,add[n<<2]

;void

build

(int root,

int l,

int r)

int mid=

(l+r)

>>1;

build

(root<<

1,l,mid)

;build

(root<<1|

1,mid+

1,r)

; min[root]

=min

(min[root<<1]

,min[root<<1|

1]);

}void

pushdown

(int root)

void

add(

int i)

}void

modify

(int root,

int l,

int r,

int x,

int y)

if(l>=x&&r<=y&&min[root]

>1)

int mid=

(l+r)

>>1;

if(add[root]

)pushdown

(root);if

(x<=mid)

modify

(root<<

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

(y>mid)

modify

(root<<1|

1,mid+

1,r,x,y)

; min[root]

=min

(min[root<<1]

,min[root<<1|

1]);

}int

query

(int i)

return ans;

}int

main()

fclose

(stdin);

fclose

(stdout);

return0;

}

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

COGS 2632 數列操作d

傳送門 題目描述 乙個長度為 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,查詢區...

cogs240 數列操作 線段樹

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