題目傳送門
題目大意:乙個序列,m個詢問,每次詢問區間內有多少個出現過正偶數次的數。
考慮用分塊做。
分塊的基本套路就是塊與塊之間的資訊可以合併,然而這題並沒有什麼可以合併的。
但是可以預處理答案呀!
設 f [i
][j]
f[i][j]
f[i][j
] 表示第 i
ii 塊到第 j
jj 塊的答案,那麼可以 o(n
n)
o(n\sqrt n)
o(nn)
預處理出 f
ff 陣列,但是,對於乙個詢問,不但要處理中間的連續的塊,還要處理兩邊剩下的呀。於是,對於兩邊零散的數字,記錄下每種數字出現了幾次,再搞出它在中間的連續的塊**現過幾次然後更新一下就好了。
為了節省空間,我想到了乙個很好的時間換空間的沙雕做法:記錄下每種數字出現的位置,然後二分求解。演算法總時間複雜度:o(n
nlog
n)
o(n\sqrt n~logn)
o(nnl
ogn)
。當然最簡單的辦法就是直接存下來了——利用字首和思想,sum
[i][
j]
sum[i][j]
sum[i]
[j] 表示數字 j
jj 在 1
11 ~ i
ii 塊的出現次數即可。
**如下(用的是nnl
og
nn \sqrt n~logn
nnlog
n的做法,講真,慢的一比,要加讀優再吸口氧才能過……):
#include
#include
#include
using
namespace std;
#define maxn 500010
int n,m;
int a[maxn]
;struct node
;node b[maxn]
;int ll[
2*maxn]
,rr[
2*maxn]
;int v[
2*maxn]
;//記錄每種數字的出現次數,下面會多次使用
intcheck
(int x,
int le,
int ri)
if(left==-1
)return v[x]%2
==0;//如果沒出現過
l=ll[x]
,r=rr[x]
;while
(l<=r)
//二分出x這個數字在le~ri區間內的出現位置在b陣列中的區間if(
(right-left+1)
%2==1
)return v[x]%2
==1?1
:0;//根據奇偶性修改ans
else
return v[x]%2
==1?-
1:0;
}bool
cmp(node x,node y)
int belong[maxn]
,l[1010
],r[
1010
],cnt,block;
void
work()
tot++
; belong[i]
=cnt;
} r[belong[n]
]=n;
}int f[
1010][
1010];
int zhan[maxn]
,t=0
;void
work2()
f[i]
[j]=ans;
}while
(t>
0)v[zhan[t--]]
=0; ans=0;
}}voidgo(
int x,
int y)
}inline
charcn(
)//讀優
void
read
(int
&x)while
(ch>=
'0'&&ch<=
'9')x=x*10+
(ch-
'0')
,ch=cn(
);x*
=f1;
}int
main()
;//b陣列是用來記錄每種數字的出現位置的
sort
(b+1
,b+n+
1,cmp)
;//值為第一關鍵字,在原序列的的位置為第二關鍵字
//排完序後,每一種數字就都排在一起了,並且他們的位置也都拍好了序
for(
int i=
1;i<=n;i++
)work()
;//分塊預處理
work2()
;//預處理答案(即f陣列)
int lastans=0;
memset
(v,0
,sizeof
(v))
;while
(m--
)printf
("%d\n"
,lastans)
;for
(int i=x;i<=y;i++
) v[a[i]]--
;//記得清空v陣列
}else
}}
洛谷P4135 作詩
神犇sjy虐完heoi之後給傻 lyd出了一題 shy是t國的公主,平時的一大愛好是作詩。由於時間緊迫,shy作完詩之後還要虐oi,於是shy找來一篇長度為n的文章,閱讀m次,每次只閱讀其中連續的一段 l,r 從這一段中選出一些漢字構成詩。因為shy喜歡對偶,所以shy規定最後選出的每個漢字都必須在...
洛谷 P1101 題解
這道題可以用深搜 回溯 來寫,相信大部分人都是這麼想的,但是有些人可能在一些地方饒了半天,所以這裡就貼一下我的思路,個人覺得自己的很好懂,除了tx和ty那裡,但是tx和ty的那種用法對於輸出路徑的題目一般很實用 這個算是比較簡單的吧,題目裡給出了具體要找的字串,我們要做的就是對它進行8個方向的搜尋,...
洛谷 P1169 題解
請你在乙個黑白矩陣中選出乙個長方形 含正方形 和正方形的子矩陣,使得所有相鄰的點顏色不一樣。矩陣大小 兩條邊都 2000 2000 2 000輸入 3 31 0 1 0 1 0 1 0 0輸出4 6解釋給定矩陣 正方形 長方形 我的控制台是萌萌噠 ffc0cb粉色 乙個小技巧 如果您的控制台是像我的...