P1903 國家集訓隊 數顏色 維護佇列

2021-09-25 03:20:05 字數 1863 閱讀 8955

h yp

erli

nk

hyperlink

hyperl

ink de

scri

ptio

ndescription

descri

ptio

n 這道題的帶修版本

s ol

utio

nsolution

soluti

on原來那道靜態主席樹就可以解決了,這道當然是樹套樹啦

可是,原來那道莫隊不是也能做嗎?現在能不能也能用莫隊做呢?

答案是肯定的,那就是今天的主角:帶修莫隊

加個時間戳就可以了2333,同時排序要先按l

ll再按r

rr最後按ttt

記住分塊的大小要自己列方程解呀,這道題取t=n

q3

t=\sqrt[3]

t=3nq​

,可以達到本演算法理論最快複雜度o(n

4q3)

o(\sqrt[3])

o(3n4q

​),開個氧氣就過了2333

c od

ecode

code

#pragma gcc optimize("ofast")

#pragma gcc optimize("inline")

#include

#include

#include

#include

#define n 50010

using

namespace std;

inline

long

long

read()

char s[5]

;int belong[n]

,cnt[

1000010

],a[n]

,t,n,lenq,lenc,tim;

long

long ans[n]

,now;

struct node

}q[n]

;struct data

c[n]

;inline

void

add(

int x)

inline

void

del(

int x)

inline

void

work

(int tim,

int i)

swap

(c[tim]

.val,a[c[tim]

.pos]);

return;}

signed

main()

else

if(s[0]

=='r')}

t=ceil

(exp((

log(n)

+log

(lenq))/

3));

for(

register

int i=

1;i<=n;i++

) belong[i]

=(i-1)

/t+1

;sort

(q+1

,q+1

+lenq)

;for

(register

int i=

1,l=

1,r=

0;i<=lenq;i++

)for

(register

int i=

1;i<=lenq;i++

)printf

("%lld\n"

,ans[i]);

}

P1903 國家集訓隊 帶修改莫隊

題意 傳送門 p1903 國家集訓隊 數顏色 維護佇列 題解帶修改莫隊與普通莫隊相比多了乙個對應修改操作的時間軸,每個查詢由二維的 l,r l,r l,r 變為三維的 l,r,t l,r,t l,r,t 基本思路即對查詢的前 w 1 w 1w 1 維分塊,使前 w 1 w 1w 1 維在塊內值域範圍...

國家集訓隊 數顏色 維護佇列

然而這題還帶修改。帶修改的莫隊怎麼做呢?於是我趕緊去補習了一波。對於當前詢問,可以知道的是只有它之前的修改操作能夠對它造成影響。所以我們可以記錄下每個詢問的前面有幾次修改 struct queryq maxm struct changec maxm main函式中 for register int ...

國家集訓隊 數顏色

點此看題 正解應該是帶修莫隊,我們這裡講一下樹套樹的做法。本題主要涉及的問題是去重,我們定義nxt i nxt i nxt i 為最靠近i ii位置後面顏色和i ii相同的位置,統計 l,r l,r l,r 裡面不同顏色的個數即統計 i lrnx t i r sum nxt i r i lr nxt...