刷漆公升級(分塊)

2021-08-09 02:37:12 字數 1240 閱讀 9520

本來打的線段樹

敲了半天,大佬說這題線段樹被卡95分。。。

不過這題用分塊做確實方便一點,而且跑的還快

顏色的資料範圍有2^31,直接開陣列會炸掉

而且要實現快速查詢,更改,刪除

顯然用map來維護比較好

區間更改,所以要延遲更新

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define for(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;++i)

#define dor(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;--i)

#define inf 0x3f3f3f3f

#define m 100005

#define n 350

inline

void chkmx(int &a,int b)

inline

int max(int a,int b)

inline

int min(int a,int b)

} blk[n];

int a[m];

int n,m,k,l;

void build()

void down(int s)

void fill(int l,int r,int s,int a)

void update(int l,int r,int a)

down(s1);

fill(l,blk[s1].r,s1,a);

for(i,s1+1,s2-1)

down(s2);

fill(blk[s2].l,r,s2,a);

}int query(int l,int r,int a)

down(s1);

for(i,l,blk[s1].r)if(a[i]==a) tmp++;

for(i,s1+1,s2-1) tmp+=blk[i].mp[a];

down(s2);

for(i,blk[s2].l,r)if(a[i]==a) tmp++;

return tmp;

}int main()

return

0;}

藍橋杯 城牆刷漆(未完)

x國的一段古城牆的頂端可以看成 2 n個格仔組成的矩形 如圖所示 現需要把這些格仔刷上保護漆。你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔 對角相鄰也算數 但不能移動到較遠的格仔 因為油漆未乾不能踩!比如 a d b c e f 就是合格的刷漆順序。c e f d a b 是另一種合...

整除分塊(數論分塊)

乙個有 趣的問題 求 sum n lfloor frac ni rfloor n leq 10 顯然不能直接做廢話 經過一番冷靜推理暴力打表 我們發現以下性質 1.large lfloor frac ni rfloor 最多只有 2 sqrt 種取值 證明 對於 i le sqrt,只有 sqrt ...

分塊 分塊練習三題

分塊嘛 馮巨道德午餐講過的 唯一不同的是可能需要st n ed n 來記錄一下範圍 例教主的魔法 板 include using namespace std define in read int in const int n 1e6 5 int n,q,a n b n add n int siz,m...