題目大意:第一行有乙個正整數m,表示操作個數。
接下來m行,每行先給出1個正整數c。
若c=1,之後乙個正整數x,表示新建乙個權值為x的節點,並且節點編號為n+1(當前有n個節點)。
若c=2,之後兩個正整數a,b,表示在a,b之間連線一條邊。
若c=3,之後兩個正整數a,x,表示a聯通塊內原本權值小於x的節點全部變成x。
若c=4,之後兩個正整數a,x,表示a聯通塊內原本權值大於x的節點全部變成x。
若c=5,之後兩個正整數a,k,表示詢問a所屬於的聯通塊內的第k小的權值是多少。
若c=6,之後兩個正整數a,b,表示詢問a所屬聯通塊內所有節點權值之積與b所屬聯通塊內所有節點權值之積的大小,
若a所屬聯通塊內所有節點權值之積大於b所屬聯通塊內所有節點權值之積,輸出1,否則為0。
若c=7,之後乙個正整數a,表示詢問a所在聯通塊大小
若c=8,之後兩個正整數a,b,表示斷開a,b所連線的邊。
若c=9,之後乙個正整數a,表示斷開a點的所有連邊
c<=7
將乙個聯通塊合併刪除,可以建權值線段樹,動態開點,使用線段樹合併。
3、4操作即插入 等於大於/小於x的數的個數 的x,然後將小於/大於x的數全部刪除。
6操作可以將乘積轉為對數加法(不過好像不轉也可以..),反正也只是比較大小..
好像不寫記憶體**會**的把..在delete以後一定再賦值成null
#include
#include
#include
#define n 400001
#define m 1000000000
using
namespace
std;
deque
recycle;
struct node
void* operator
new(size_t)
static node *mempool,*c;
if(mempool==c) mempool=(c=new node[1
<<20])+(1
<<20);
return c++;
}void
operator
delete(void* tmp)
void maintain()
}*root[n];
int t,n,pa[n];
inline
int find_pa(int x)
void insert(node*& o,int pos,int val,int l,int r)
int mid=l+r>>1;
if(pos<=mid) insert(o->ch[0],pos,val,l,mid);
else insert(o->ch[1],pos,val,mid+1,r);
o->maintain();
return ;
}void merge(node*& x,node*& y)
x->siz+=y->siz, x->sum+=y->sum;
merge(x->ch[0],y->ch[0]), merge(x->ch[1],y->ch[1]);
return ;
}void clear(node*& o,int l,int r,int l,int r)
int mid=l+r>>1;
if(r<=mid) clear(o->ch[0],l,r,l,mid);
else
if(l>mid) clear(o->ch[1],l,r,mid+1,r);
else clear(o->ch[0],l,mid,l,mid), clear(o->ch[1],mid+1,r,mid+1,r);
o->maintain();
return ;
}int query_siz(node* o,int l,int r,int l,int r)
int query_kth(node* o,int x,int l,int r)
int main()
case
2: case
3: case
4: case
5: case
6: case
7: }
}return
0;}
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(線段樹合併)
現在分析線段樹合併的複雜度,舉乙個最基本的例子 權值為 1,n n 棵動點線段樹,每個線段樹插入了乙個權值,那麼總共有 n log n 個點,而每一次合併相當於少掉了乙個點,那麼合併完這 n 棵線段樹後複雜度就是消失的點的個數,不會超過總共的點數,所以複雜度是 n log n 的。類似的,對最一般的...