COJ1013 WZJ的資料結構(十三)

2022-05-04 01:09:11 字數 1460 閱讀 9992

這道題有這樣乙個解法:

首先把邊依次加到圖中,若當前這條邊與圖中的邊形成了環,那麼把這個環中最早加進來的邊彈出去

並將每條邊把哪條邊彈了出去記錄下來:ntr[i] = j,特別地,要是沒有彈出邊,ntr[i] = 0;

這個顯然是可以用lct來弄的對吧。

然後對於每個詢問,我們的答案就是對l~r中ntr小於l的邊求和,並用n減去這個值

正確性可以想一下:

如果一條邊的ntr >= l,那麼顯然他可以與從l ~ r中的邊形成環,那麼它對答案沒有貢獻

反之如果一條邊的ntr < l那麼它與從l ~ r中的邊是不能形成環的,那麼他對答案的貢獻為-1

#include#include

#include

#define lc ch[x][0]

#define rc ch[x][1]#include

using

namespace

std;

inline

intread()

const

int maxn=200010

;const

int maxnode=2000010

;const

int inf=1000000000

;int fa[maxn],pre[maxn],mn[maxn],val[maxn],flip[maxn],ch[maxn][2

];void maintain(int

x) void pushdown(int

x)void rotate(int x,int

d)void splay(int

x)

else

pushdown(x);

}void access(intx)}

void makeroot(int x)

void link(int x,int y)

void cut(int x,int

y)int find(int

x)int query(int x,int

y)int

u[maxn],v[maxn],f[maxn],root[maxn],tot;

intls[maxnode],rs[maxnode],s[maxnode];

void build(int& y,int x,int l,int r,int

pos)

int query(int y,int l,int r,int

pos)

intmain()

if(find(u[i])!=find(v[i])) link(u[i],i+n),link(i+n,v[i]);

else

}for(int i=1;i<=m;i++) build(root[i],root[i-1],0

,m,f[i]);

while(q--)

return0;

}

view code

COJ0985 WZJ的資料結構(負十五)

coj0985 wzj的資料結構 負十五 試題描述 chx有乙個問題想問問大家。給你乙個長度為n的數列a,請你找到兩個位置l,r,使得a l a l 1 a r 中沒有重複的數,輸出r l 1的最大值。以上是附中聯賽加試的一道題。wzj覺得這道題太水了,改了改題目 wzj有乙個問題想問問大家。給你乙...

COJ0989 WZJ的資料結構(負十一)

coj0989 wzj的資料結構 負十一 試題描述 給出以下定義 1.若子串行 l,r 的極差 最大值 最小值 m,則子串行 l,r 為乙個均勻序列。2.均勻序列 l,r 的權值為sum l,r 即序列的元素和。現在給你乙個長度為n的整數序列a,請你求出權值前k大的均勻序列,輸出k行為它們的權值。輸...

COJ 1003 WZJ的資料結構(三)ST表

wzj的資料結構 三 難度級別 b 執行時間限制 3000ms 執行空間限制 51200kb 長度限制 2000000b 試題描述 請你設計乙個資料結構,完成以下功能 給定乙個大小為n的整數組a,m次詢問。每次詢問給你i,j兩個引數,求ai至aj中最大的數。輸入第一行為兩個正整數n,m。第二行為n個...