分塊模板 模板題

2021-08-15 12:29:47 字數 1569 閱讀 1862

嗯…直接貼板子了,(注釋寫了點)..

#include

using

namespace

std;

const

int maxn=1e5+10;

int a[maxn],belong[maxn],l[1010],r[1010],block,num;//a陣列訪問原始資料,belong陣列表示每個數屬於哪一塊方便呼叫,l和r表示各塊左右端點,block各塊大小,num塊數量

void change(int l,int r,int add)//修改,視情況而定

int query(int l,int r)//查詢,同上

void build(int n)//建立各塊(各個分塊這個操作大致一樣)

int main()//讀入

墨墨購買了一套n支彩色畫筆(其中有些顏色可能相同),擺成一排,你需要回答墨墨的提問。墨墨會向你發布如下指令:

1、 q l r代表詢問你從第l支畫筆到第r支畫筆中共有幾種不同顏色的畫筆。

2、 r p col 把第p支畫筆替換為顏色col。

為了滿足墨墨的要求,你知道你需要幹什麼了嗎?

輸入輸出格式

輸入格式:

第1行兩個整數n,m,分別代表初始畫筆的數量以及墨墨會做的事情的個數。

第2行n個整數,分別代表初始畫筆排中第i支畫筆的顏色。

第3行到第2+m行,每行分別代表墨墨會做的一件事情,格式見題幹部分。

輸出格式:

對於每乙個query的詢問,你需要在對應的行中給出乙個數字,代表第l支畫筆到第r支畫筆中共有幾種不同顏色的畫筆。

基本是裸的,不過資料要稍微離散下,再加個bitset加速(離散還不怎麼會…)

**(最慢點196ms)

#include

using

namespace

std;

const

int maxn=1e5+7;

int a[maxn],t[maxn],belong[maxn],num,l[1010],r[1010],mp[1000010],cnt=0,block;

bitset

<11010>bst[4010],ans;bool vis[11010];

void lisan(int n)//離散

void build(int n)

}int query(int l,int r)

return res;

}ans.reset();

for(int i=l;i<=r[belong[l]];i++)

ans.set(a[i]);

for(int i=belong[l]+1;i//暴力搞

ans|=bst[i];

for(int i=l[belong[r]];i<=r;i++)

ans.set(a[i]);

return ans.count();

}void change(int pos,int to)//同上暴力

int main()

return

0;}

分塊模板題

題目描述 給出乙個長為n的數列,以及n個操作,操作涉及區間加法,單點查值。輸入格式 第一行輸入乙個數字 n 第二行輸入 n 個數字,第 i 個數字為a i 以空格隔開 接下來輸入 n 行詢問,每行輸入四個數字 opt,l,r,c,以空格隔開 若 opt 0,表示將 l,r 的之間的數都加 c 若 o...

Color the ball( 分塊模板 )

color the ball 分塊1 n個氣球排成一排,從左到右依次編號為1,2,3.n.每次給定2個整數a b a b lele便為騎上他的 小飛鴿 牌電動車從氣球a開始到氣球b依次給每個氣球塗一次顏色。但是n次以後lele已經忘記了第i個氣球已經塗過幾次顏色了,你能幫他算出每個氣球被塗過幾次顏色...

BZOJ 1806 樹分塊 模板題

time limit 10 sec memory limit 162 mbsec special judge submit 2685 solved 1635 submit status discuss 餘 人國的國王想重新編制他的國家。他想把他的國家劃分成若干個省,每個省都由他們王室聯邦的乙個成 員...