1.
bzoj彈飛綿羊 跟這道題目一模一樣。hihocode的題目資料比較水,暴力也可以過。
分塊,塊內修改+查詢。
學習的別人的**。
1 #include2view code#define pb push_back
3 typedef long
long
ll;4
using
namespace
std;
5 typedef pairpii;
6const
int maxn = 1e5 + 10;7
8int
n, m, k;
9int
a[maxn];
10int
be[maxn], b[maxn], c[maxn];
11void up(int
i) else19}
20int ask(int
i) 26
return
r;27}28
29void
solve()
34 k = sqrt(n + 0.5
);35
for (int i = n; i >= 1; i--)
38 scanf("
%d", &m);
39int
x, y, v;
40while(m--) else51}
52}53}
5455
intmain()
2. 區間統計,區間計數,主要是沒有線段樹區間加和的性質,無法維護,利用分塊計算計數,然後用計數分布稀疏的特徵進行k次冪的計算,比較難。
1 #include2view code#define pb push_back
3 typedef long
long
ll;4
using
namespace
std;
5 typedef pairpii;
6const
int maxn = 1e5 + 10;7
const
int mod = 1e9 + 7;8
ll ppow(ll x, ll y)
18return
r;19
}20 ll tk[maxn][105
];21
intn, m, s;
22int
a[maxn];
23int
be[maxn];
24ll res[maxn];
25//
mapma;
26//
mapmc;
27int
ma[maxn], mc[maxn];
28struct
node
34return x
36};
37node q[maxn];
38ll cur;
39set
se;40void add(int
x) 47}48
void del(int
x) 53 --ma[x];
54 mc[ma[x] ]++;55}
56 ll f(int
k) 61
for (int
x : se)
64/*
65for (int i = 1; i <= s; i++)
68for (auto i = ma.upper_bound(s); i != ma.end(); i++)
*/71
return
r;72}73
void
init() 79}
80}81void
solve()
94int
x, y, v;
95for (int i = 1; i <= m; i++) ;98}
99 sort(q + 1, q + m + 1
);100
for (int i = 1, l = 1, r = 0; i <= m; i++)
106while(l >q[i].x)
110while(r >q[i].y)
114while(l
118//
cout << i << endl;
119 res[q[i].id ] =f(q[i].k);
120//
cout << res[q[i].id ] << endl;
121}
122for (int i = 1; i <= m; i++)
123 printf("
%lld\n
", res[i]);
124}
125126
intmain()
上面的2題算是對分塊思想的介紹,主要是知道(l,r),可以很快的計算(l,r+1),(l,r-1),(l+1,r),(l-1,r),然後就可以利用分塊的性質。
暫時就這麼多吧,有時間做這類題目訓練一下。
bzoj3585 莫隊 分塊
description 有乙個長度為n的陣列。m次詢問,每次詢問乙個區間內最小沒有出現過的自然數。input 第一行n,m。第二行為n個數。從第三行開始,每行乙個詢問l,r。output 一行乙個數,表示每個詢問的答案。sample input 5 52 1 0 2 1 3 32 3 2 41 2 ...
分塊 莫隊學習粗略預習
分塊 莫隊學習總結 2020 08 12 16 55 32 thumb up 0 大概就是暴力的進化版,採用 大段維護,小段樸素 的思想 拿個板子說事 已知乙個數列,你需要進行下面兩種操作 將某區間每乙個數加上 k。求出某區間每乙個數的和。序列長度為1e5,運算元為1e5,裸的線段樹板子 分塊的思路...
莫隊與分塊精簡小結
我覺得我還要補上帶修莫隊,樹上莫隊等等 先咕著 分塊 引用範圍廣,實現簡潔 注意塊的邊界 一般為 sqrt 分塊。塊中可維護很多東西,維護資訊時從後往前處理。例題 hnoi2010 彈飛綿羊 includeusing namespace std define s x x x inline int r...