COGS 2264 魔法傳輸

2022-03-27 10:32:58 字數 1719 閱讀 7423

自從看了《哈利波特》,小y就十分渴望獲得魔法值。於是他和一群嚮往魔法的孩子(當然這些孩子們都是不會魔法的)來到了哈利波特的家,大家坐成一排。哈利波特會不時的給大家傳輸魔法。

哈利每次會選擇乙個區間,給這個區間裡的孩子們傳輸魔法:最左邊的孩子給一點,第二個給兩點……哈利有時會突然問你某乙個孩子已經有了多少魔法。

第一行兩個正整數 n,m,表示有 n 個孩子,哈利有 m 次操作。

接下來 m 行,每行代表乙個操作。第乙個字元為 ci,若 ci=『c』則此次操作為傳送魔法操作,接下來會有兩個整數li,ri,表示此次送魔法值的區間。若 ci=『q』則此次操作為詢問操作,接下來乙個整數xi,表示詢問第xi個孩子當前的魔法值。

對於每組詢問輸出一行,僅包含乙個整數,表示答案對 1,000,000,007 取模(mod)的結果。

3 4c 1 3

q 2c 2 3

q 2對於 30%的資料,n,m≤1,000;

對於 100%的資料,n,m≤100,000。

一道難得的好題= =

實際上這道題除了想出思路,哪都很容易= =

這道題的主要難度就在於如何更改上,等差數列更改讓一些資料結構顯得很吃力,但實則不然,我們完全可以用線段樹來實現這個東西

我們發現,我們需要在一段區間更新一段以$1$為首項的等差數列,那麼,我們假如只在區間的每乙個點加$1$,效果會怎樣?

顯然這時候如果單點求和是不行的,但如果我們求字首和的話,我們就可以得到等差數列求和的效果了不是嗎?

我們只需要在區間中的每乙個點都加上$1$,右端點右面乙個點減去$r-l+1$就可以達到差分的目的,查詢時只需要查詢單點字首和即可

1 #include2 #include3 #include4

using

namespace

std;

5 inline int

read()

12 typedef long

long

l;13

intn,m;

14 l sum[400005],add[400005

];15

const l mod=1000000007

;16 inline void pushup(int

i)19 inline void pushdown(int i,int

len)29}

30 inline void update(int ll,int rr,l w,int l,int r,int

i)37 pushdown(i,r-l+1

);38

int mid((l+r)>>1

);39

if(ll<=mid)

40 update(ll,rr,w,l,mid,i<<1

);41

if(mid

42 update(ll,rr,w,mid+1,r,i<<1|1

);43

pushup(i);44}

45 inline l query(int ll,int rr,int l,int r,int

i)57

char op[2

];58 inline int

gg()

68else73}

74return0;

75}76int

k(gg());

77int main()

view code

2 26 演算法練習

時間限制 1.0s 記憶體限制 512.0mb 給定兩個僅由大寫字母或小寫字母組成的字串 長度介於1到10之間 它們之間的關係是以下4中情況之一 1 兩個字串長度不等。比如 beijing 和 hebei 2 兩個字串不僅長度相等,而且相應位置上的字元完全一致 區分大小寫 比如 beijing 和 ...

日思清單2 26

訂閱李笑來 通往財富自由之路 這個專欄已經差不多半年了,這半年的心態從 一定要公升級我的作業系統 到 其實等過幾天看 只是把3分鐘熱度延長了而已。由於大部分人都不是含著 密鑰匙 出生,中國也一直都有 望子成龍 或 望女成鳳 的傳統,所以可以假定我們每個人都希望出人頭地,你還可以想象大家一般還會說 等...

藍橋杯練習 2 26

字串對比 思路 此題主要考察c 中字串的一些應用 c 中可以直接定義乙個空字串,然後直接讀入 string s1 cin s1 也可以用getline 讀入 接受乙個字串,可以接收空格並輸出 string str getline cin,str 都需包含 include 獲得字串長度len s1.s...