花神遊歷各國 線段樹開方

2021-09-13 23:54:36 字數 2029 閱讀 5558

時間限制: 1000 ms         記憶體限制: 524288 kb

提交數: 127     通過數: 47

原題來自:bzoj 3211

花神喜歡步行遊歷各國,順便虐爆各地競賽。花神有一條遊覽路線,它是線型的,也就是說,所有遊歷國家呈一條線的形狀排列,花神對每個國家都有乙個喜歡程度(當然花神並不一定喜歡所有國家)。

每一次旅行中,花神會選擇一條旅遊路線,它在那一串國家中是連續的一段,這次旅行帶來的開心值是這些國家的喜歡度的總和,當然花神對這些國家的喜歡程式並不是恆定的,有時會突然對某些國家產生反感,使他對這些國家的喜歡度 δ

變為 δ√

(可能是花神虐爆了那些國家的 oi,從而感到乏味)。

現在給出花神每次的旅行路線,以及開心度的變化,請求出花神每次旅行的開心值。

第一行是乙個整數 n,表示有 n個國家;

第二行有 n個空格隔開的整數,表示每個國家的初始喜歡度 δ

i;第三行是乙個整數 m,表示有 m條資訊要處理;

第四行到最後,每行三個整數 x,l,r,當 x=1 時詢問遊歷國家 l 到 r 的開心值總和,就是 ∑r

i=lδ

i ,當 x=2 時國家 l 到 r 中每個國家的喜歡度 δ

i變為 δ

i−−√。

每次 x=1

時,每行乙個整數。表示這次旅行的開心度。

4

1 100 5 5

51 1 2

2 1 2

1 1 2

2 2 3

1 1 4

101

1111

對於全部資料,1≤n≤105,1≤m≤2×105,1≤l≤r≤n,0≤δ

i≤109。

注:建議使用 sqr

t 函式,且向下取整。

思路:

這個題是要求開方的,我們可以知道,乙個數多開幾次都會變成1,所以用flag標記,flag=1時表示不用開方了。

**如下:

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

typedef pairp;

const int inf=4e8;

const int n=100015,mod=32767;

ll sum[n<<2];

int flag[n<<2];

void push_up(int rt)

void build(int l,int r,int rt)

int m=(r+l)>>1;

build(lson);

build(rson);

push_up(rt);

}void push_down(int l,int r,int rt)

int m=(l+r)>>1;

push_down(lson);

push_down(rson);

push_up(rt);

}}ll query(int l,int r,int l,int r,int rt)

int m=(l+r)>>1;

ll ans=0;

if(l<=m)ans+=query(l,r,lson);

if(r>m)ans+=query(l,r,rson);

return ans;

}void update(int l,int r,int l,int r,int rt)

int m=(l+r)>>1;

if(l<=m)update(l,r,lson);

if(r>m)update(l,r,rson);

push_up(rt);

}int main()

else

}}

線段樹 H 花神遊歷各國

output 每次x 1時,每行乙個整數,表示這次旅行的開心度 sample input 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 2 3 1 1 4 sample output hint 對於100 的資料,n 100000,m 200000 data i 非負且小於10...

花神遊歷各國

0 和 1 開方之後不會改變,對 0,1 節點打上標記 如果孩子節點都打上標記了,說明這些孩子節點的和不會改變,那麼父節點也打上標記 對於打上標記的點,change 的時候直接 return include include int n,m long long arr 100005 2 at 1000...

花神遊歷各國 bzoj3211 線段樹

有乙個n個數的序列a,請寫乙個程式完成下列操作 1 l r表示查詢l到r的和 2 l r表示把每個a x l x r 變為sqrt x n 100000,m 100000 其實我是偶然看過冪偉的題解的 滑稽 109 最多開根6次就變成1了,對於1無論怎樣開根都是不影響的 兩種做法。如果是樹狀陣列的話...