傳送門
題目描述:
給定長度均為 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 個整數,表示 的初始值。第三行...