NOIP模擬 線段樹 標記下傳 Query

2021-08-04 07:19:31 字數 2132 閱讀 2475

題目描述:

萬惡的大頭又出現了!他正在玩乙個智障遊戲:打怪獸。

現在大頭的螢幕上出現了一排怪獸,每只怪獸頭上有乙個血條,每次大頭可以選擇乙個區間進行攻擊,攻擊值為 k ,這個區間中血量小於 k 的怪獸都會被大頭無情地乾掉,當然怪獸不會坐以待斃,對於乙個區間的怪獸,他們會在某個時刻血量同時加 x 。

大頭頭雖然很大,但是 iq 並不高,在座的各位選手都不知道比他高到**去了。這個時候大頭使出了大招——***,然而大頭的***並不高階只能將選擇的區間內血量為 7 的倍數的怪獸乾掉,問:他能乾掉多少怪獸?

輸入格式:

第一行乙個正整數 n ;

接下來 n 行 n 個整數;

再接下來乙個正整數 q ,表示操作的個數;

接下來 q 行每行若干個整數。如果第乙個數是 add ,後接 3 個正整數 a,b,x,表示在區間 [a,b] 內每個數增加 x,如果是 count,表示統計區間 [a,b] 能被 7 整除的個數。

輸出格式:

對於每個詢問輸出一行乙個答案。

樣例輸入:

3 2 3 4

6 count 1 3

count 1 2

add 1 3 2

count 1 3

add 1 3 3

count 1 3

樣例輸出:

0 0

0 1

題目分析:

線段樹。懶標記+標記下傳。稍微特殊的就是對於線段樹tree結構體,開乙個tot陣列,用來存模7後不同餘數的個數,修改也是修改餘數值,詳見**。

附**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=1e5+10;

int n,q,a[maxn],x,y,z;

char s[10];

struct nodetree[4*maxn];

int readint()

for(;ch>='0'&&ch<='9';ch=getchar())

i=(i<<3)+(i<<1)+ch-'0';

return i*f;

}void create(int l,int r,int k)

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

create(l,mid,k<<1);

create(mid+1,r,k<<1|1);

for(int i=0;i<=6;i++)

tree[k].tot[i]=tree[k<<1].tot[i]+tree[k<<1|1].tot[i];

}void change(int k,int v)//本題的關鍵操作,乙個區間先已知各種餘數分別的個數,修改的就是餘數,而不是個數

void push_down(int k)

void update(int l,int r,int k,int x,int y,int w)//修改操作,修改的是add值,即標記

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

push_down(k);

if(x<=mid) update(l,mid,k<<1,x,y,w);

if(y>mid) update(mid+1,r,k<<1|1,x,y,w);

for(int i=0;i<=6;i++)

tree[k].tot[i]=tree[k<<1].tot[i]+tree[k<<1|1].tot[i];

}int query(int l,int r,int k,int x,int y)

int main()

}return

0;}

zkw線段樹 標記下放

zkw線段樹的標記上傳好像只能做區間修改的rmq,但標記下放應用面就與樸素線段樹差不多了,但是漂亮很多。在進行修改或詢問時,我們先將當前區間的標記全部下放,從左右開區間端點從頂向下跑一邊下放就是,同時,對於修改後,再從左右區間把祖先更新,zkw的非遞迴性質發揮的淋漓盡致。其實很好編,下面兩道題都是1...

模擬 線段樹 hdu4262 Juggler

juggler 題目 題意 有個數字圓環。三種操作 逆時針轉乙個,順時針轉乙個,丟掉手中的那個的同時順時針的數字到你的手裡。每個操作都花費一秒。告訴你要求的出圈順序,求最小花費時間。注 開始在手中的球為1.題解 假設當前要移除的珠子為i,我們會發現無論左移還是右移都會得到同乙個序列,即移去某個數字對...

NOIP模擬 被粉碎的線段樹

不會做啊!打了個貪心,沒有加倍增,然後在打了幾個特殊情況拿了85分。其實答案有乙個性質 區間的定位個數 2 區間的長度 完全被包含的區間個數,比如說 2,7 的答案 7 2 1 2 9 3,包含的區間 2,2 3,3 4,4 5,5 2,3 5,7 6,7 6,6 7,7 好神奇啊!為什麼nie?感...