2020智算之道複賽E 樹數數

2022-02-27 08:03:17 字數 2121 閱讀 6528

傳送門

題意就懶得複述了

直接對著尤拉序建線段樹,每個節點用乙個堆來維護標記。

每次修改可能導致一部分區間被某個點覆蓋,而且這個覆蓋並不遵循後邊的修改會覆蓋前面的修改這樣的規則,而是深度小的黑點優先於深度大的黑點,因此需要用堆來維護標記。由於區間只會完全包含,不會出現交叉的情況,可以標記永久化,刪除也容易處理。

#include#include

#include

#include

#define ll long long

#define lx (x<<1)

#define rx ((x<<1)|1)

using

namespace

std;

char ibuf[20000004],*iptr=ibuf-1

,c;inline

int_()

inline

int_char()

char obuf[5000000],*optr=obuf;

inline

void

_(ll x)

const

int mn = 210000

;struct nab[mn];

int n, m, num=0, f[mn], w[mn], l[mn], si[mn], l[mn], r[mn], pdf[mn], order = 0

, color[mn], deep[mn];

ll lose[mn

<<2

];ll ans[mn

<<2

];ll co[mn];

priority_queue

tag[mn<<2

];pair

pair_add(paira, pairb)

inline

void

in(int x,int y)

void dfs1(int

x) r[x] =order;

}void build(int x, int l, int

r)

int mid = l+r>>1

; build(lx, l ,mid);

build(rx, mid+1

, r);

lose[x] = lose[lx]+lose[rx];

}void update(int x, int l, int

r)else

while(tag[x].size() && (!color[tag[x].top()])) tag[x].pop();

if(tag[x].size())

}pair

ask(int x, int l, int r, int l, int

r)

int mid = l+r>>1

; pair

res;

if (r <=mid)

else

if (l >mid)

else

while(tag[x].size() && (!color[tag[x].top()])) tag[x].pop();

if(tag[x].size())

return

res;

}void addtag(int x, int l, int r, int l, int r, int

p) update(x, l, r);

return

; }

int mid = l + r >> 1

;

if (r <=mid)

else

if (l >mid)

else

update(x, l, r);

}int

main()

else

if (s == 'f'

)else

if (s == 'm'

) }

}fwrite(obuf,

1,optr-obuf,stdout);

}

view code

2020智算之道複賽

共 5 個測試點 每個測試點 20 分 每個測試點限時 1 秒 執行記憶體上限 512mb 咕咕有兩個數字 a,b 它忘記了 a 的前三位 記除去前三位的 a 為 aa 但它記得 a 與 b 滿足 a 0 mod b 即 a 是 b 的倍數。請你幫它求出有多少種滿足條件的 a。注意 a 沒有前導 0...

智算之道 2020智算之道初賽第三場題解

乙個模擬的水題.int main return 0 這個b.卡的直接醉了 按照題意模擬即可 模擬建議使用雙端佇列deque 最好還是陣列吧,deque必須全域性才可以 被deque全域性卡了乙個小時40分鐘 第乙個坑點是注意摸牌順序 可能會wa 第二個坑點是處理摸牌順序 可能會t 第三個坑點是刪牌標...

2020 智算之道 初賽 第三場

2020 中國軟體行業智慧型應用程式設計大賽 奇怪的比賽 似乎算是ioi賽制,最高分最短執行時間排名靠前,題目有部分分 維護當前溫度和當前體積,按要求修改或輸出資訊 在整個過程中,維護同一人手牌中同一點數的牌最多只有一張。維護雙向鍊錶表示兩人的手牌,簡單起見設定首尾為 哨兵節點 維護map 點數,指...