本來打的線段樹
敲了半天,大佬說這題線段樹被卡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...