統計顏色 線段樹

2022-05-01 07:21:11 字數 1504 閱讀 2594

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 32768k,其他語言65536k

64bit io format: %lld

n個桶按順序排列,我們用1~n給桶標號。有兩種操作:

1 l r c 區間[l,r]中的每個桶中都放入乙個顏色為c的球 (1≤l,r ≤n,l≤r,0≤c≤60)

2 l r   查詢區間[l,r]的桶中有多少種不同顏色的球     (1≤l,r ≤n,l≤r)

有多組資料,對於每組資料:

第一行有兩個整數n,m(1≤n,m≤100000)

接下來m行,代表m個操作,格式如題目所示。

對於每個2號操作,輸出乙個整數,表示查詢的結果。
示例1

10 10

1 1 2 0

1 3 4 1

2 1 4

1 5 6 2

2 1 6

1 7 8 1

2 3 8

1 8 10 3

2 1 10

2 3 8

232

43這題是線段樹裸題 ,用位運算處理很方便

參加運算的兩個物件,按二進位制位進行「或」運算。

運算規則:0|0=0;  0|1=1;  1|0=1;   1|1=1;

即 :參加運算的兩個物件只要有乙個為1,其值為1。

#include #include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 1e5 + 10

;typedef

long

long

ll ;

ll add[maxn

<< 2], sum[maxn << 2

];void

pushup(ll rt)

void

pushdown(ll rt)

}void

updata(ll x, ll y, ll z, ll l, ll r, ll rt)

pushdown(rt);

ll m = (l + r) >> 1

; updata(x, y, z, l, m, rt

<< 1

); updata(x, y, z, m + 1, r, rt << 1 | 1

); pushup(rt);

}ll query(ll x, ll y, ll l, ll r, ll rt )

ll getx(ll x)

return

ans;

}int

main()

else}}

return0;

}

(線段樹統計區間種類)

第14屆中北大學程式設計競賽來了,集訓隊新買了一大堆氣球,氣球一共有k種顏色 1 k 256 氣球的顏色從1 k編號。zbt童心未泯,他發明了一種擺放氣球的遊戲,規則如下。一排有n個桌子,每張桌子上只有乙個氣球插孔,即每張桌子最多只能放乙個氣球。編號分別為1 n 1 n 100000 每張桌子一開始...

洛谷 1110 報表統計 線段樹

題解 考慮離散化,利用兩顆線段樹來維護合適的資訊求解兩個詢問。min gap 求相鄰的差值絕對值最小。建立線段樹儲存差值的出現次數,詢問時求差值最小的那個即可。記位置i ii初始值為a i a i a i 新插入的值為b i b i b i 初始b i a i b i a i b i a i 當在位...

線段樹入門 P2068 統計和

題目描述 給定乙個長度為n n 100000 初始值都為0的序列,x x 10000 次的修改某些位置上的數字,每次加上乙個數,然後提出y y 10000 個問題,求每段區間的和。時間限制1秒。輸入輸出格式 輸入格式 第一行1個數,表示序列的長度n 第二行1個數,表示操作的次數w 後面依次是w行,分...