思路:
可以先做做bzoj3585 是序列上的mex
考慮莫隊的轉移 如果當前數字出現過 線段樹上把它置成1
對於詢問 二分ans 線段樹上查 0到ans的和 是不是ans+1
本題就是把它搞到了序列上 帶了個修改…
麻煩一點 本質上是一樣的
//by siriusren
#include
#include
#include
#include
using namespace std;
const int n=55555;
int n,m,cnt=1,block,block[n],op,xx,yy,a[n],vis[n],last[n],sum[n],tree[n*8];
int first[n],next[n*2],v[n*2],tot,s[n],top,fa[n][20],cnt1,cnt2,deep[n],ans[n];
void add(int
x,int
y)void dfs(intx)}
struct ask
ask(int t,int i,int l,int r)
friend bool operator<(ask a,ask b)
change(int l,int p,int nn)
}change[n];
void insert(int l,int r,int
pos,int num,int f)
int mid=(l+r)>>1,lson=pos
<<1,rson=pos
<<1|1;
if(mid1,r,rson,num,f);
else insert(l,mid,lson,num,f);
tree[pos]=tree[lson]+tree[rson];
}int query(int l,int r,int
pos,int l,int r)
void reverse(int
x) else
}}void change_color(int
x,int
y)void work(int
x,inty)}
int lca(int
x,int
y)bool check(int
x)int main()
else change[++cnt2]=change(last[xx],xx,yy),last[xx]=yy;
}sort(ask+1,ask+1+cnt1);
for(int i=1,t=0;i<=cnt1;i++)
for(;t>ask[i].time;t--)
if(i!=1)work(ask[i-1].l,ask[i].l),work(ask[i-1].r,ask[i].r);
else work(ask[i].l,ask[i].r);
reverse(lca(ask[i].l,ask[i].r));
int l=0,r=n,ans=0;
while(l<=r)
ans[ask[i].id]=ans;
reverse(lca(ask[i].l,ask[i].r));
}for(int i=1;i<=cnt1;i++)printf("%d\n",ans[i]);
}
BZOJ 4129 樹上帶修莫隊 線段樹
思路 可以先做做bzoj3585 是序列上的mex 考慮莫隊的轉移 如果當前數字出現過 線段樹上把它置成1 對於詢問 二分ans 線段樹上查 0到ans的和 是不是ans 1 本題就是把它搞到了序列上 帶了個修改 麻煩一點 本質上是一樣的 by siriusren include include i...
F Machine Learning(帶修莫隊)
f.machine learning 思路 統計每個數字出現的次數numi,記錄次數numi出現的次數cnti。然後就是帶修莫隊的事情了。注意 不要用node x,y,z 這種方式,不然就是錯,很迷。include include include include include includeusi...
帶修莫隊 bzoj2120 數顏色
塊大小為n2 3。把詢問和修改分開。每次兩個詢問之間的修改進行暴力轉移,如果修改在上一次詢問的區間裡,就會對當前狀態形成影響。好慢。include include include includeusing namespace std define n 10001 int num n n,m,b n ...