牛客第五場 H Interval 主席樹

2021-10-08 17:57:04 字數 1629 閱讀 7650

f (l

,r)=

al&a

l+1&

...&

ar

f(l, r) = a_l \& a_ \& ... \& a_

f(l,r)

=al​

&al+

1​&.

..&a

r​s (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...