CQBZOJ 2856 線段樹 原子核研究

2021-07-29 10:47:41 字數 1324 閱讀 8795

線段樹水題專項賽:portal

要求一種資料結構使得能夠支援插入乙個值,刪除乙個值,查詢最小的差值。(所有輸入資料小於100000,並且你需要自動去重)

一看,這不一思博線段樹嗎?維護每乙個區間左右有多少空格,中間(不包含左右端點)的最短區間,然後兩兩合併就行了啊。

於是迅速碼完**,信心滿滿的交了,然後就爆成了0分。

考完檢查,mdzz,陣列沒清零,mdzz,build的區間用的(1,n)。

我天,以後一定要記住,多組資料一定記得清零,線段樹先找好區間,不要手殘亂打。

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 100000

#define maxm 100000

#define inf 0x3f3f3f3f

typedef

long

long

int ll;

template

void read(t &x)

while('0'

<=c&&c<='9')

if(flag)x=-x;

}int l[maxm*3],r[maxm*3];

int len[maxm*3];

int lval[maxm*3],rval[maxm*3],minval[maxm*3];

int sz;

void updata(int x)

void build(int l,int r,int x)

void insert(int pos,int x)

int mid=(l[x]+r[x])>>1;

if(pos<=mid)insert(pos,x<<1);

else insert(pos,x<<1|1);

updata(x);

}void del(int pos,int x)

int mid=(l[x]+r[x])>>1;

if(pos<=mid)del(pos,x<<1);

else del(pos,x<<1|1);

updata(x);

}int query()

bool has[maxm+10];

int main()

}else

if(str[0]=='r')

}else

printf("%d\n",query());

}putchar('\n');

}}

線段樹 02 構建線段樹

public inte ce merger 不能再縮小的基本問題是 對treeindex指向的節點的情況進行討論 public class segmenttree 在treeindex的位置建立表示區間 l.r 的線段樹 private void buildsegmenttree int treei...

線段樹 01 線段樹基礎

物理上 public class segmenttree public int getsize public e get int index 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的左孩子節點的索引 private int leftchild int index 返回完全二叉樹的陣列表示中...

線段樹和zkw線段樹

好啦,我們就開始說說線段樹吧 線段樹是個支援區間操作和查詢的東東,平時的話還是蠻實用的 下面以最基本的區間加以及查詢區間和為例 線段樹顧名思義就是棵樹嘛,葉子節點是每個基本點,它們所對應的父親就是它們的和,具體如下圖 但是對於這樣的線段樹來說,操作所需的時間是遠達不到我們的要求的 會被t 因為我們會...