tyvj4866 擺攤 線段樹MEX

2021-08-19 03:24:04 字數 2282 閱讀 9267

真的感覺自己real弱啊 在zhx的**幫助下理解了這個內容 我不知道自己這麼低的智商未來會不會有出路

有一些必要的解釋,放在了程式中

next[i][0]表示 在序列a中下標為i+1到m中最近一次出現a[i]-1的位置

關於這個線段樹的使用

線段樹其實我們是查詢截至到右端點,我們現在可用的最小值

我每次處理l的時候 在l+1到min(next[l][1],next[l][2])之間 都可以使用a[l]這個地方

官方的題解:

100分做法:

記 nxt(x,y) 為下標從 x+1 開始 a 陣列第一次出現 y 這個數字的位置。

離線處理這個問題,考慮 l 從 1 到 m 掃過去,在掃過去的同時維護 r 等於 l 到 m 的答案。

然後把詢問也按照 l 排序,就可以在 l 掃過去的過程依次回答詢問。 l=1 的時候,可以暴力處理出來 r 等於每個值的答案。

然後 l 每次 +1。

l 從 x 變成 x+1 的過程,對於維護 r 等於 x+1 到 m 的答案來 說,變化是少了 a[x] 這乙個數字,對於 r>=nxt(x,a[x]) 的數字是沒有影 響的。對於 r 在 x 到 min(nxt(x,a[x]),nxt(x,a[x]+1)) 之間的答案由於 a[x] 被去掉,並且也沒有 a[x]+1 這個數字,a[x] 在這一段就是乙個可能的答 案 (換句話說 r 在這些位置的答案應該和 a[x] 取 min);對於 r 在 x 到 min(nxt(x,a[x]),nxt(x,a[x]-1)) 之間的答案由於 a[x] 被去掉,並且沒有 a[x]-1 這個數字,a[x]-1 在這一段就是乙個可能的答案 (換句話說 r 在這些位置的 答案應該和 a[x]-1 取 min)。發現去掉 a[x] 並沒有其他影響。

nxt(x,a[x]),nxt(x,a[x]+1),nxt(x,a[x]-1) 可以 o(n) 預處理。

#include

#include

#define n 220000

#define inf 0x7f7f7f7f

struct nodeq[n];

struct node1tree[n<<2];

inline int

read()

while (ch<='9'&&ch>='0')

return

x*f;

}inline bool cmp(node a,node b)

intnext[n][3];//next[i][0]表示[i+1]號位置 到結束第一次出現a[i]-1的地方,其餘同理

intlast[n],ans[n],mex[n],num,n,m,q1,a[n],root; bool map[n];

inline void update(int

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

int mid=l+r>>1;

build(tree[x].left,l,mid);build(tree[x].right,mid+1,r);

//update(x);

}void insert1(int

x,int l,int r,int v)

int mid=tree[x].l+tree[x].r>>1;

if (l<=mid) insert1(tree[x].left,l,r,v);

if (r>mid) insert1(tree[x].right,l,r,v);

//update(x);

}int query(int

x,int l)

void print(int

x)int main()

//for (int i=1;i<=m;++i) printf("%d ",mex[i]);

for (int i=m;i>=1;--i)

for (int i=1;i<=q1;++i) q[i].l=read(),q[i].r=read(),q[i].id=i;

std::sort(q+1,q+q1+1,cmp);

build(root,1,m);int l=1;//printf("asdf%d ",tree[root].min);

for (int i=1;i<=q1;++i)

// print(root);printf("asdfasd\n");

ans[q[i].id]=query(root,q[i].r);

}for (int i=1;i<=q1;++i) printf("%d

%d\n",ans[i],ans[i]+1);

return

0;}

Qt4 8 6詳細安裝步驟

在網上檢視了很多篇關於qt 4的安裝方法,都是以前很久的帖子,所以就想按自己的方式重新總結一下,希望可以幫助到大家。這個檔案整合了編譯器 gcc g gdb偵錯程式 qt庫 qtcreator整合開發環境 qt creator opensource windows x86 3.1.2.exe qtc...

ARM Qt交叉編譯 Qt4 8 6

2.假設原始碼目錄 home zl,安裝目錄 home zl arm qt4.8.6,交叉編譯鏈結 home zl gcc linaro arm 此處的交叉編譯鏈工具按照自己的 3.將qt everywhere opensource src 4.8.6.tar.gz複製到 home 目錄下tar x...

tyvj 叢林探險

東非大裂谷中有一片神秘的叢林,是全世界探險家的樂園,著名黃 探險家bb一直想去試試。正好我國科學家2005年4月將首次對東非大裂谷進行科考,bb決定隨科考隊去神秘叢林探險。在出發之前,他蒐集了國內外有關神秘叢林探險的資料,並繪製成一張地圖 該地圖上有若干安全點 包括入口點和出口點 並將這些安全點編號...