數顏色 維護佇列(帶修莫隊)

2022-05-06 23:39:11 字數 1050 閱讀 4473

一直想學這個演算法,但是沒有碰見類似的於是就作罷

今天忽然看到這道題有點感覺,搞一搞

感覺帶修莫隊其實不是特別深奧難懂的

只是在原有的基礎上加了乙個時間軸

我比較喜歡在struct裡面寫過載

struct

mo

return l}

} q[n];

這樣就排好序了,大致的也沒啥,直接上**看看就很容易懂的哦

#includeusing

namespace

std;

const

int n=1e6+7

;int

m,n,k,size,res,qnum,cnum,inc;

intcnt[n],ans[n],a[n];

struct

mo

return l}

} q[n];

struct

change

c[n];

void change(int now,int

t) swap(a[c[now].pos],c[now].val);

}int

main()

else

}sort(q+1,q+qnum+1

);

int l=0,r=0,now=0

;

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

while (lif (cnt[a[l]]==0) inc--;l++;}

while (r>q[i].r)

while (rif (cnt[a[r]]==0) inc++;cnt[a[r]]++;}

while (now>q[i].t)

while (now;change(now,i);}

ans[q[i].id]=inc;

}for (int i=1;i<=qnum;i++) printf("

%d\n

",ans[i]);

return0;

}

國家集訓隊 數顏色 維護佇列(帶修莫隊)

題意 對給定的序列,回答m個詢問,q 詢問l到r中不同的顏色數量,r 將下標為x的顏色改為y 題解 帶修莫隊,相對普通的莫隊,加多了乙個關鍵字排序 include define num ch 0 define pn putchar n using namespace std templatevoid...

數顏色(莫隊帶修)

數顏色題目鏈結 帶修改的莫隊,關於時間複雜度的分析沒仔細看,但是這是乙個能實現更改的離線操作,感覺在之前的維度上加了一維 時間維度,可以將狀態向前或者向後改變,而時間的變遷也用while來更新,以達到操作目的,sort規則也變成這樣 return qu a.l qu b.l qu a.r qu b....

帶修莫隊 數顏色

bzoj2120 帶修莫隊的做法 把所有修改也離線下來 新建乙個tk指標表示進行了k次修改,然後對於每個詢問記錄一下它之前有多少次修改,記為k,處理這個詢問時如果當前修改次數小於k,那麼就把tk往上滾,並進行修改,如果大於k,就把tk往下滾,並回溯修改 code include using name...