SDUT 3930 線段樹 狀壓

2021-08-02 03:28:34 字數 2009 閱讀 9552

problem description

一天,乙隻住在 501 實驗室的皮卡丘決定發奮學習,成為像 leiq 一樣的巨巨,於是他向鎮上的賢者金桔請教如何才能進化成乙隻雷丘。

金桔告訴他需要進化石才能進化,並給了他乙個地圖,地圖上有 n 個小鎮,他需要從這些小鎮中收集進化石。

接下來他會進行 q 次操作,可能是打聽進化石的資訊,也可能是向你詢問第 l 個小鎮到第 r 個小鎮之間的進化石種類。

如果是打聽資訊,則皮卡丘會得到乙個小鎮的進化石變化資訊,可能是引入了新的進化石,也可能是失去了全部的某種進化石。

如果是向你詢問,你需要回答他第 l 個小鎮到第 r 個小鎮之間的進化石種類。

input

首先輸入乙個整數 t (1 <= t <= 10),代表有 t 組資料。

每組資料的第一行輸入乙個整數 n (1 <= n <= 100000) 和乙個整數 q (1 <= q <= 100000),分別代表有 n 個小鎮,表皮卡丘有 q 次操作。

接下來輸入 q 行,對於每次操作,先輸入操作型別,然後根據操作型別讀入:

output

對於每組輸入,首先輸出一行 "case t:",表示當前是第幾組資料。

對於每組資料中的每次 3 操作,在一行中按編號公升序輸出所有可收集的進化石。如果沒有進化石可收集,則輸出乙個 meik 的百分號 "%"(不包括引號)。

example input

1

10 10

3 1 10

1 1 50

3 1 5

1 2 20

3 1 1

3 1 2

2 1 50

2 2 20

3 1 2

3 1 10

example output

case 1:%50

5020 50

%%

思路:種類的範圍不超過60,所以為樹上每個節點加乙個longlong值表示狀態即可,之後再統計種類。

(不用狀壓也能過)

code:

#include #define ll long long

#define lson l, m, rt<<1

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

using namespace std;

const int maxn = 100005;

ll c[maxn<<2], ans;

int n, q, opt[65];

void pushup(int rt)

void update(int cz, int key, int cur, int l, int r, int rt)

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

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

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

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

}int main()

{ int t, q1, q2, q3, count = 0;

scanf("%d", &t);

while(t--)

{ scanf("%d %d", &n, &q);

printf("case %d:\n", ++count);

memset(c, 0, sizeof c);

for(int i = 1; i <= q; ++i)

{ scanf("%d %d %d", &q1, &q2, &q3);

if(q1 == 1) update(q3, 1, q2, 1, n, 1);

if(q1 == 2) update(q3, 0, q2, 1, n, 1);

if(q1 == 3)

{ans = 0;

query(q2, q3, 1, n, 1);

int tot = 0;

for(int i = 1; i <= 60; ++i)

if((1ll《繼續加油~

線段樹 狀態壓縮

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 ...

Apple Tree(樹狀陣列 線段樹)

description 3 1 2 1 3 3 q 1 c 2 q 1 sample output 3 2 題目大意 一棵樹上長了蘋果,每乙個樹枝節點上有長蘋果和不長蘋果兩種狀態,兩種操作,一種操作能夠改變樹枝上蘋果的狀態,另一種操作詢問某一樹枝節點一下的所有的蘋果有多少。樹狀陣列版 include...

線段樹 樹狀陣列 總結

前言在對這三個資料結構進行了粗淺的學習之後,博主發現資料結構的世界是多麼的美妙。然後在博主的專業作死技能加持之下,三個資料結構的大戰一觸即發 對於某些題目 如,單點更新並且查詢區間和 那麼這個時候,我們會發現用樹狀陣列也十分吃香,畢竟這正是樹狀陣列所擅長的!它的時間複雜度均為o log n 相比於線...