一開始感覺是分塊,但是好像不太茲瓷。於是覺得是莫隊。
yy了乙個做法就是每16個分成一塊,然後o(16)修改,o(n/16)詢問,配合莫隊就是o(16n^1.5+n^2/16),不知道能不能過(當然不是16應該也是茲瓷的)。
ac**如下:
#include#define ll long long
#define n 200005
using namespace std;
int n,m,rt,pt,key,blk,dfsclk,cnt,fst[n],nxt[n],a[n],q[n],rk[n];
int d[n],fa[n],son[n],sz[n],anc[n],lf[n],rg[n],id[n];
ll res,c[n],ans[n]; bool vis[n];
struct nodeb[n];
int read()
return x;
}int lca(int x,int y);
}void add(int x,ll y)
ll getsum(int x)
void mdy(int y) else
}void dfs(int x)
}void ***(int x,int tp)
bool cmp1(int x,int y)
return 0;
}
by lych
2017.2.19
bzoj1878 HH的項鍊(莫隊)
這篇部落格簡要介紹下我對莫隊的理解。莫隊是一種複雜度為o n sqrt n 的演算法。具體思路是 通過區間左端點的左移和右移與區間右端點的左移和右移來進行更新 排序的時候進行分塊操作,目的是減少左移右移的次數。分塊的話假設序列個數是n,那麼就分為sqrt n 塊,然後根據塊進行排序 就是先將要查詢的...
BZOJ 1878 HH的項鍊(莫隊演算法)
description hh有一串由各種漂亮的貝殼組成的項鍊。hh相信不同的貝殼會帶來好運,所以每次散步完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同的貝殼?這個問題很難回答。因為項...
BZOJ3781 小B的詢問 莫隊
題目 有乙個序列,包含n個1 k之間的整數。他一共有m個詢問,每個詢問給定乙個區間 l.r 求sigma c i 2 的值,其中i的值從1到k,其中c i 表示數字i在 l.r 中的重複次數。思路 裸的莫隊吧。直接開陣列 c 暴力維護每個數出現的次數,區間轉移的時候如果假如加入乙個數 k,維護平方和...