GDOI2019模擬2019 3 25 芬威克樹

2021-09-13 16:41:26 字數 3147 閱讀 3681

首先每個點x+lowbit(x)唯一,所以所有的點形成了一棵樹

問題變成了鏈修改單點求

考慮當k為奇數時,所有的操作不會改變x的最低非0位

即所有的點形成了以(2x

+1)k

d,(2x+1

d>=0

)(2x+1)k^d,(2x+1=0)

(2x+1)

kd,(

2x+1

d>=0

)開頭的一堆鏈,如果能對每個數找到它所在的開頭就做完了

當k為偶數時,考慮將k寫成k=2

p∗ak=2^p*a

k=2p∗a

,a是奇數,那麼可以發現所有的s=2

q∗bs=2^q*b

s=2q∗b

,b是奇數且q>=b的s也形成了一堆以(2x

+1)∗

2pkd

,((2

x+1)

2pd>=0

)(2x+1)*2^pk^d,((2x+1)2^p=0)

(2x+1)

∗2pk

d,((

2x+1)2p

d>=0

)開頭的鏈

對於剩下的點,我們考慮暴力跳到第乙個合法的s

注意到對於乙個x,如果最低位不變那麼只需要跳p次就跳到了,否則就說明有進製產生,而進製最多為log⁡k

n\log_kn

logk​n

次,所以總次數為p

∗log⁡k

n=log⁡2k

∗log⁡k

n=log⁡2n

p*\log_kn=\log_2k*\log_kn=\log_2n

p∗logk​n

=log2​

k∗logk​n

=log2​

n現在問題就變成了對於乙個數找到其對應的開頭,考慮最低位不會改變,所以會一直/2直到不能再除,然後就會產生退位

總的退位次數我們是可以計算出來的,對於數x,其最低位為t,那麼退位次數為⌊xk

t⌋\lfloor \rfloor

⌊ktx​⌋

,直接倍增求出來就行了

複雜度大概是o(q

log⁡kn

log⁡2n

)o(q\log_kn\log_2n)

o(qlogk​

nlog2​

n),由於當k=2時有點跑不過所以特判了。。。。

#include
#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

#define fd(i,a,b) for(int i=a;i>=b;i--)

using

namespace std;

intread()

void

write

(int x)

char ch[20]

;int tot=0;

for(

;x;x/=10

) ch[

++tot]

=x%10

+'0';fd

(i,tot,1)

putchar

(ch[i]);

puts(""

);}const

int n=

2e5+

5,m=n<<5;

int tr[m]

,ls[m]

,rs[m]

,tot,rt[m]

;void

modify

(int

&v,int l,

int r,

int x,

int y)

intquery

(int v,

int l,

int r,

int x,

int y)

int n,q,k,l,p,w,cnt,pw[35]

,ct[n]

,g[n][35

];int inv[n]

;map<

int,

int> id,val;

intlow

(int x)

intlowbit

(int x)

intlowbit

(int x)

intfind

(int x)

s=g[s][0

];return id[s*pw[t-1]

];}void

modify

(int x,

int v)

intquery

(int x)

intmain()

return0;

}for

(l=k;

!(l&1)

;l>>=

1) p++

;for

(int x=n;x;x/

=k) w++

; pw[0]

=1;fo

(i,1

,w-1

) pw[i]

=pw[i-1]

*k;fo

(i,1

,w)fo

(j,0

,k/2-1

)fo(i,1

,k)for

(int x=i;

!(x&1)

;x>>=

1) ct[i]++;

fo(i,

1,k)

if(ct[i]

>=p) inv[i*

2%k]

=i;fo

(j,1,30

)fo(i,1

,k) g[i]

[j]=g[inv[g[i]

[j-1]]

][j-1]

;for

(;q;q--)if

(opt==2)

}return0;

}

GDOI2019模擬2019 3 4 總結

今天來的相對早一些,感覺時間上還行。看題t1一開始沒有什麼思路 t2感覺可能是貪心然後用資料結構維護之類的 t3計算幾何 思考t1 認真觀察了資料範圍以後感覺可以dp,但是複雜度是kn 3的,有66分,似乎還可以字首和優化 寫著寫著就發現相當的難寫,暴力都調到了10點多,加上字首和優化恐怕更困難,於...

GDOI2019模擬2019 3 22 總結

今天被一道資料結構題搞了3h 前兩題就沒什麼時間想了,有點難受 t1一道構造博弈題,想了一會沒什麼思路 t2又是奇怪的樹的計數,沒怎麼仔細想,先跳過。t3,哇,這不是樹套樹板題嗎?猶豫了一會,感覺用線段樹套個splay比較靠譜 於是就寫啊寫,寫啊寫 寫完就調啊調,調啊調 光寫就寫到10 00 調到不...

GDOI2019模擬2019 3 23 總結

今天的比賽感覺還是沒有發揮出水平,被困死在了一道題 t1一開始蹦出一些思路,都沒有什麼好辦法做,先寫了個50分去看下一題 t2隨手推了一會式子,這不是常係數齊次線性遞推麼 完全忽略掉能不能過 然後又是寫啊寫,調啊調 一直搞到12 30 一測極限,怎麼跑個1分鐘都跑不出來 心態崩了 趕快去看t3,感覺...