本質上還是乙個線段樹裸題
就是要思考這個線段樹記錄的是什麼
線段樹記錄區間中每個元素的下乙個元素的最小值
這樣只要查詢的時候小於右邊界即可
而如果把某個值變為空,即模擬一下鍊錶操作即可
那麼就變成了單點修改,區間查詢
#include#define fi first
#define se second
#define debug cout<<"i am here"<>1;
build(node<<1,l,mid);
build(node<<1|1,mid+1,r);
tree[node]=min(tree[node<<1],tree[node<<1|1]);
}void update(int node,int l,int r,int pos,int zhi)
int mid=(l+r)>>1;
if(mid>=pos) update(node<<1,l,mid,pos,zhi);
else update(node<<1|1,mid+1,r,pos,zhi);
tree[node]=min(tree[node<<1],tree[node<<1|1]);
}int query(int node,int l,int r,int l,int r)
int mid=(l+r)>>1,mi=inf;
if(mid>=l) mi=min(mi,query(node<<1,l,mid,l,r));
if(midreturn mi;
}signed main()
build(1,1,n);
for(int i=1,opt,x,l,r;i<=q;i++)
if(bef[x]!=0)
update(1,1,n,x,inf);
}elseelse}}
return 0;
}
買禮物 鍊錶 線段樹)
在賣禮物的超市中有n個櫃子,每個櫃子裡都擺放了乙個禮物,每個禮物有自己的乙個編號,第i個櫃子裡的禮物編號為ai 茶山牛想給牛牛和牛妹買相同編號的禮物,但禮物有可能在某個時刻被其他人買走,而且櫃子數量太多,因此茶山牛在某個時刻只想知道某乙個櫃子區間是否能買到兩件相同編號的禮物。具體來說,有q次操作,格...
E 買禮物(鍊錶 線段樹)
傳送門 題目大意 給出乙個序列,有以下兩種操作 解題思路 很好的一道題,之前在洛谷寫過查詢區間內是否有兩數相同是用莫隊維護的區間種類數,但是本題如果寫莫隊估計要tle tletl e,然後學到了這手很強的問題轉化技巧 對於區間內的每個數,我們只需要知道它右邊離他最近相同數的在哪個位置,然後判斷區間內...
線段樹 買水果
水果姐今天心情不錯,來到了水果街。水果街有n家水果店,呈直線結構,編號為1 n,每家店能買水果也能賣水果,並且同一家店賣與買的 一樣。學過oi的水果姐迅速發現了乙個賺錢的方法 在某家水果店買乙個水果,再到另外一家店賣出去,賺差價。就在水果姐竊喜的時候,cgh突然出現,他為了為難水果姐,給出m個問題,...