真的感覺自己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決定隨科考隊去神秘叢林探險。在出發之前,他蒐集了國內外有關神秘叢林探險的資料,並繪製成一張地圖 該地圖上有若干安全點 包括入口點和出口點 並將這些安全點編號...