51nod 1471 小S的興趣 分塊

2021-08-10 01:39:23 字數 1344 閱讀 8399

由於這題的n,q比較大且時限只有1.5s,所以下意識地覺得分塊不能過,於是就往各種資料結構方面想。。。

貌似是有一些奇奇怪怪的資料結構姿勢可以過。

只要想到分塊這題就不難了。

對每個塊維護乙個雙向佇列和桶,修改的話就頭尾兩塊暴力搞,然後把前面每塊的結尾扔到下一塊的隊頭。

詢問的話就中間的塊掃桶兩邊暴力找即可。

#include#include#include#include#include#includeusing namespace std;

const int n=100005;

const int m=325;

int n,m,ls[n*2],nx[n*2],bel[n],sta[m],end[m],w[m][n],h[m],t[m],a[n];

int read()

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

return x*f;

}void modify(int l,int r)

int x=t[bel[l]],y=h[bel[r]];

for (int i=end[bel[l]];i>=l;i--) x=ls[x];

for (int i=sta[bel[r]];i<=r;i++) y=nx[y];

w[bel[l]][a[y]]++;w[bel[r]][a[y]]--;

ls[nx[y]]=ls[y];nx[ls[y]]=nx[y];

nx[ls[x]]=y;ls[y]=ls[x];ls[x]=y;nx[y]=x;

for (int i=bel[l];iint x=ls[t[i]],y=nx[h[i+1]];

w[i][a[x]]--;w[i+1][a[x]]++;

ls[nx[x]]=ls[x];nx[ls[x]]=nx[x];

nx[ls[y]]=x;ls[x]=ls[y];ls[y]=x;nx[x]=y;

}}int query(int l,int r,int k)

for (int i=bel[l]+1;iint x=t[bel[l]],y=h[bel[r]];

for (int i=end[bel[l]];i>=l;i--) x=ls[x],ans+=(a[x]==k);

for (int i=sta[bel[r]];i<=r;i++) y=nx[y],ans+=(a[y]==k);

return ans;

}int main()

for (int i=1;i<=bel[n];i++)

m=read();

int ans=0;

while (m--)

}return

0;}

51nod 1778 小Q的集合

原題連線 題目繞了一點。並沒有直接給出數字形式。而且這個題有好像有很多方法。我也yy了乙個 不過還是題解多效率高 題目中是給定了乙個集合 s 並且有 s n 要說明的是。這個集合是沒有重複元素的集合。這一點很重要 其實不特別說明。一般集合也都沒有重複元素。集合s的子集數量等價於 從 s 中取元素的取...

51nod 1742 開心的小Q

我們由於莫比烏斯函式如果有平方數因子就是0,那麼我們可以列出這樣的式子 sum sum 1 mu d 然後列舉倍數 sum sum rfloor 1 mu d sum f lfloor frac rfloor f x 就表示1 x有多少數有平方因子 可以用容斥得到 f n n sum mu i lf...

51Nod 1468 小Y的IP位址

acm模版 這個題我不會,請教的我 佐神燈 學姐,她說是神馬解方程組,高斯消元,這個我也能想到,但是奇了怪了,最後她的 怎麼成了這種構造方法 看 據說,明天早上她會把詳細題解放到討論區,好期待啊 o o 這個題讓我很納悶兒,我加上輸入輸出優化比不加還慢上十幾毫秒,平時像這種大量輸入輸出的題,加上我那...