BZOJ4399 魔法少女LJJ(線段樹合併)

2022-05-20 15:56:11 字數 1208 閱讀 4891

注意到只有增加點/合併的操作。這些操作都可以用線段樹完成,於是線段樹合併一發就好了。注意乘積大小直接比較肯定會炸,取個對數即可。資料中存在重邊。

#include#include

#include

#include

#include

#include

using

namespace

std;

intread()

while (c>='

0'&&c<='

9') x=(x<<1)+(x<<3)+(c^48),c=getchar();

return x*f;

}#define n 400010

#define inf 1000000000

intm,tot,fa[n],root[n],cnt;

int find(int x)

struct datatree[n*16

];void up(int

k)void down(int

k)void ins(int &k,int l,int r,int x,int s,double

y)int merge(int x,int y,int l,int

r)

returnx;}

int modify(int k,int l,int r,int x,int

y)

if(tree[k].f) down(k);

int mid=l+r>>1

,ans;

if (y<=mid) ans=modify(tree[k].l,l,mid,x,y);

else

if (x>mid) ans=modify(tree[k].r,mid+1

,r,x,y);

else ans=modify(tree[k].l,l,mid,x,mid)+modify(tree[k].r,mid+1,r,mid+1

,y);

up(k);

return

ans;

}int query(int k,int l,int r,int

x)int

main()

case2:

case3:

case4:

case5:

case6:

case7:}}

return0;

}

bzoj4399 魔法少女LJJ

bzoj4399 魔法少女ljj 在森林中見過會動的樹,在沙漠中見過會動的仙人掌過後,魔法少女ljj已經覺得自己見過世界上的所有稀奇古怪的事情了 ljj感嘆道 這裡真是個迷人的綠色世界,空氣清新 淡雅,到處散發著醉人的奶漿味 小猴在枝頭悠來蕩去,好不自在 各式各樣的鮮花爭相開放,各種樹枝的枝頭掛滿沉...

BZOJ 4399 魔法少女LJJ 線段樹

傳送門 出題人真會玩。操作 2 線段樹合併,然後每棵線段樹維護元素個數和。對於 6 這個詢問,因為乘積太大,所以要用對數。時間複雜度 o nlogn include include include include includeusing namespace std const int n 4000...

BZOJ 4399 魔法少女LJJ 線段樹合併

題目大意 第一行有乙個正整數m,表示操作個數。接下來m行,每行先給出1個正整數c。若c 1,之後乙個正整數x,表示新建乙個權值為x的節點,並且節點編號為n 1 當前有n個節點 若c 2,之後兩個正整數a,b,表示在a,b之間連線一條邊。若c 3,之後兩個正整數a,x,表示a聯通塊內原本權值小於x的節...