f (l
,r)=
al&a
l+1&
...&
ar
f(l, r) = a_l \& a_ \& ... \& a_
f(l,r)
=al
&al+
1&.
..&a
rs (l
,r)=
s(l, r) = \
s(l,r)=qq
q 次查詢 l
ll 和 r
rr,求 s(l
,r
)s(l, r)
s(l,r)
乙個數字連續作與操作,不同數字最多出現 log
loglo
g 個因此對每個 a
ia_i
ai,記錄它往左不停作與操作出現的不同數字
這裡我們要查詢 s(l
,r
)s(l, r)
s(l,r)
,也就是以 r
rr 為右端點,做與操作的不同數字且產生過程都在 l
ll 右端
聯想到主席樹求區間不同數字的操作
這裡就可以在記錄 a
ia_i
ai 往左不停作與操作出現的不同數字 的同時
維護產生這些數字的左端點的最大值
這個最大值 max
maxma
x 就是我們查詢 s(l
,r
)s(l, r)
s(l,r)
時,ll
l 必須要 ≤ma
x≤max
≤max
因為所有的不同數字最多 nlo
gn
nlogn
nlog
n 個,因此直接用 map
mapma
p 維護最大值即可
時間複雜度:o(n
log2
n+ql
ogn)
o(nlog^2n +qlogn)
o(nlog
2n+q
logn
)
#include#define rint register int
#define deb(x) cerr<<#x<<" = "<<(x)<<'\n';
using namespace std;
typedef long long ll;
typedef pair pii;
const int maxn = 1e5 + 5;
int t, n, q, lans, tot, root[maxn];
int t[maxn*300], ls[maxn*300], rs[maxn*300];
map mp, tmp, las;
void update(int &rt, int pre, int pos, int c, int l, int r)
int query(int rt, int l, int r, int l, int r)
signed main()
for(auto j : tmp)
mp.swap(tmp);
} scanf("%d", &q);
while(q--)
}
牛客第五場 A gpa
01分數規劃的模本題 比賽貪心,貪了半天,最後隊友想起這是01分數規劃的題 發現自己的盲區。01分數規劃可以解決 01分數規劃 最優比率生成樹問題 最優比率環問題 最大密度子圖等問題 01分數規劃的詳細講解 這篇部落格講解的很好 a i b i ac include using namespace ...
牛客多校(第五場)E room
將乙個房間當做乙個點,後來的房間與之前的房間中不用搬的人作為權值,建圖,跑最大權匹配,就是不用搬的人數,在減一下即可,km演算法,o n 3 include include include includeusing namespace std define n 200 define inf 0x3f...
2019 8 1 牛客多校第五場
index 牛客多校第五場 題號標題 通過率做法狀態a digits 2 1017 2383 簽到 bgenerator 1 555 3660 矩陣快速冪 十進位制優化 cgenerator 2 37 626 dgenerator 3 4 23 eindependent set 1 45 110 f...