由於這題的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 這個題讓我很納悶兒,我加上輸入輸出優化比不加還慢上十幾毫秒,平時像這種大量輸入輸出的題,加上我那...