[bzoj4866][莫队算法]由乃的商场之旅

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Rose_max/article/details/82782085

Description

由乃有一天去参加一个商场举办的游戏。商场派了一些球王排成一行。每个人面前有几堆球。说来也巧,由乃和你
一样,觉得这游戏很无聊,于是决定换一个商场。另一个商场是Deus的,他看到由乃来了,于是想出了一个更有趣
的游戏:写数据结构题这个题是这样的: 我们的情人,不过是随便借个名字,用幻想吹出来的肥皂泡,把信拿去吧,你可以使假戏成真。我本来是无病呻吟
,漫无目的的吐露爱情—现在这些漂泊不定的鸟儿有地方栖息了,你可以从信里看出来。拿去吧—由于不是出自
真心,话就说得格外动听,拿去吧,就这么办吧…由于世界会在7月20日完结,作为救世主,间宫卓司要在19日让
所有人回归天空现在已经是19日傍晚,大家集合在C栋的天台上,一共n个人在他们面前,便是终之空,那终结的天 空
回归天空是一件庄重的事情,所以卓司决定让大家分批次进行,给每个人给了一个小写字母’a’->'z’作为编号一个
区间的人如果满足他们的编号重排之后可以成为一个回文串,则他们可以一起回归天空,即这个区间可以回归天空
由于卓司是一个喜欢妄想的人,他妄想了m个区间,每次他想知道每个区间中有多少个子区间可以回归天空因为世 界末日要来了,所以卓司的信徒很多
由乃天天做数据结构已经快恶心死了,于是让您帮她做当然,您天天做数据结构题,肯定也觉得恶心死了,不过可 爱即正义!所以这个题还是要做的~

Input

第一行两个数n,m 之后一行一个长为n的字符串,代表每个人的编号 之后m行每行两个数l,r代表每次卓司妄想的区间 n,m<=60000

Output

m行,每行一个数表示答案

Sample Input

6 6

zzqzzq

1 6

2 4

3 4

2 3

4 5

1 1

Sample Output

16

4

2

2

3

1

题解

前缀和
只需要知道每个数当前出现的是奇数次还是偶数次
那么二进制压一下前缀和
状态数只会有N个不是很大
分回文串是奇数长度还是偶数长度讨论
偶数长度只需要他们异或为0即可
奇数长度就相当于异或后只存在一个1
预处理每个前缀第i个字符减一转移的状态
莫队乱水
其实吧我一点优化都没加…
可以卡状态数把复杂度再降低
过了就懒得加了

/*
:    .                                                                                                                  
:                                                                                                                       
i                                                                                                                       
i    .                                                                                                                  
i                                                                                                                       
:    .                                                                                                                  
i    .                                                                                                                  
i    .                                                                                                                  
i                                                                                                                       
:        .                                                                                                              
i  .  i  i :     . .    .   .     .       . .           ..    .                                   .          .          
.     .  . .       .                      .   .      .                                                          .       
:   qQ  .   v2d   .  i: ..:ij.iBE .i            EBj        .irrivri.::iiiir7r.                       .    SPd.  :       
i  UQB    .BBBBE     BBBQBBBBLiBB.1BBi    :X:   BBu    .   .KBBBBBBBBBBBBBBBQv                          :BBBBB          
. iBY PD. BBY vBBv.  ..:gB1   rBM  7B1    RQP   MBgvPPQBB          uRq.        ..                 .    jBBQ.BBBr        
:.BBrQBBBBBL   iQBB7:777gBSYvrKBBv:v71r..YPBBBBBBBBBBEBBB    7RBZQdBBBdEgBQE                         1QBB1   QBBB:      
.:BBBBJ.qBBDBBBBBBBvrQBQBBBBBBBBBBBBBgg5UBBBBriiBQ1   rBB  .:.:i. :KQBi ..::    :.. . . .   .....  UBBB5  UJ: rBBBBXi   
.  IQY     i:.:..       YBs   :BB   IE.   XBZ   QBs   7BB  rBBBBQBBBBBBBQBBBBq BQBBBBBBBBBBBBBBBBviBBE.  .BBZ   .BBgi.  
. BBBQSJ.Kb5BQgRBPv :5gQBBBQBB:YBvrBBd    QBE   BBdiBBBB5      .BB     uBs     iririiiriir7iii77i. ii    .BBD  .        
. uQ5Sv .BB::i::QBU  BBQMBK.   7BBBP.     DBq   QB1 DQ7.L. sBBdQBBMBBBQBBBBBQDi                           BB5           
.    ...:BB     KBJ     uB1   UBBBL  QBL  RQb   i:.     BBPvi.UBBuY7v7iQBqrrur.                           BBE   .       
:LBBBBBBJQBBBBQBBBJ  :rvBBu:BBB1jBBPbBB   SBBZIvSUguJXRBBB:  7QBB      BBu     ..                         BBQ           
r.XX... .QBIYXDJBB1  qBBBBi ir   rMQBQ.   .sPBBBBBBBBRBBD7  XBBi       dB1. .  ..                        .BBg           
i                .                   .                           . . .         ..                         ... .         
:                                                                                                                       
i    .                                                                   .                                              
i                                                                                                                       
i    .                                                                                                                  
i                                                                         :r:.                                          
i    .                                                                .  vKKSj. .                                       
r                                                                 ..    :B: js  .                                       
i    .                                                             .    rK .S:                 :::                      
r                                                                       :v LS             .  ibi7gv   .                 
i                                                                       :Ligi               .QJ :g7  .                  
.      ...5d:  .                                                        i2Sd               rb. vj:      .               
.   .7:r27DBi                                                      .    .Bb:     .        7K..Ps                        
uij1Pdr.  ri                                                       .     Sq              :Kj7Ii .  .     :v:            
UvY:     7P. .                                                     .     .7             .vIqX. ..  .    .dBRS7.         
.    .   qP     . .       .  ..                                       .     .  ..        :r.            .qi :2ZPi       
.    .   gs     .    .:K2  .          .irvIs75K5XEKMKgZsD522YLri.              iBB1i                     Pr   .2r       
i       iS:        .isjjQ.    .:rs5KPPMBBBZdBBgi:7Rd7XBBBRSMBBDZQZSr.        rDYiiYdQSr.                 dY             
:       Ys      .iXbi.  7: 7v5gQZqPEKXUIjUIdbr   ur    jRQr1E:  .rJgBBDL:   iEv     .sdD5Yi.             MX  .   .      
i       Si   .vU57i   .ibQBBgMPI175XUvsq5LBj   :Li.     jQLJ:  .    .rdBBQsYL           :r1ISv:         .gu    .        
:   .. iU  r5Qu.   :sBBD7qDqbbijPj5ISXv22UK   .BY .     .gSP: .q:      rBBBBS    .   .      .7KEYi.      qv    .        
.      qBsY1i   :IqBZqI2rUXLXQPrYjIuED2jZPv.  KI .  .    .BR. rd        .bBUBQu.          .    .isZK1:   5s             
:      vPv.  .idDBEP1XYKXQR1r5d2SdPqEDv7IEY  Yv    .      KB.:U.  :Ui    .BJUBBB1        .         rXqIrrB2    .        
v           rQDM1dj7SM1qIuPgXJKS2sKU5urLDMr :Bi   .  .dBMi7BPYJ 1PKL:     BjKIUPBB1       .       .   :irMX             
i  .     .vKDDr1YREIPgv1qS1Qbju1IS2US5vUZBu sr .    :BBBBdXMDMgjv.   :    guJsP7rQgU:                    JdrsSv:        
7       rQREJ5u2vuKv5dXKKPXqqXK1PSSqP2USqqBDj    .  7QBQRPQriQg:..v7i:.   MqEXBs72DQB:              .iYYr..iPRJ         
7  .  .MRB221QqKrYSSXdXXuBZuSguL1sPMDQQDPPgBi    .  :RBBMB5  PELBBBj     vP.  irRBgRPEv           .Ju7ivv7vLi.   .      
:    7DQUdSPqgIqUsKSYv5Si2PrruJSBZR5r::   :Z:        .irvX::qPPZMBBQgs  .Xs      LPuXBBi         :Dd2rLsr.      .       
i   YBZ7Lg2bUPLb172Xr7PQvJuuuMBbX7.       .uRu.         :QEBQRRBZgggQBSrY.         :SQQX         :27:.       .          
i .EP2PX1qJYIPuu5I2g2uB5YXbDZPJ   .rr.  .   7gZU7r7vYvvvJqBQRBMdgDMgBQQr            r5BBr                               
 .gB2LgEsPPuKE2IrM5Iu1U2JXgS.     :7vvvsYLL7. .rs77JJr.  JBQDBbdEZBRgBP      . .YIUvirvBQ:   .                          
XQQSqgDJ7qg5bPXqLd1bQ2JQB2.              ..:7Lv7:        iBQSREEBQQRBP:     iSPL7.     rBu                              
QgUjEE2qJbKsjX2duqYKr5BS.      ..             .rYr.       dBQBZBQBKgM. .  rZ2:          jEi                             
vJdPIJI5UPSYKb5uLbLSDEu       .                            :BBgBPEBr  .  ....         . iBK.                            
YvLb7K5L7ubsjgJuuSsPQ7  .....:iiirr77v7vrv1PXU77rr::.            :E.  .           .. ..  sgi                            
LuKQrsSd5XQPqSij7bBu    :ivu5J7i::::::::::i::.::iri..            :Ei.     ..i715qLPdUqS. iBi     .                      
7UPBv2IPqP1IdXLZZPr   .                                .         .sY       .ir:.     ..  .QE  ..                        
UsJRubSv7ggUJr1Qg:                             ..                 r5                      vd.                           
d5YPrSqX7QIvPRBX.  .  .            ..:i777r7vJvr:      .         .rZ  .                 .iE5rr                          
2LKXj2E17DjSMSQi          ..ii7uqS522J7:.....              ..     7Z.    .  .75Y::.  7KdBZEXXBQ:                        
r7PQqdEjJEPJuZJ       iIPK1j7:.:.         .:i:......              :P        .iLuvPSsXQbr     .JBP                       
sLPP1uqs2XR7JQ:       .:i.        .:71ZBBBQEDDMbdMBBBdui:         rZ.               .          bB.                      
UUqK7vSIv5PuDg                .YdQBBBBQBMESJ777s1bPdEgRQBBRUi.    .5       .                  .gq                       
vLZPvvbKLdSIBv          .   1MBRQBBBMEbZPvgBRJrLY7Uj2J7rvPDQBBgUY722            ...       ..  iBJ                       
irIKvUPI7M1SRi     .  .   7BB1JUvSd1Y512IYSBMKLPv1XirsivvUKgDgBBBBBBKr:.                  ..  uE.                       
D2KIJ5D17EPdd.  .        qBJv.ivivYi7JvrLrLEgbbP1PE:71sS5sDq7vDQD2qbgBBBMJi                  rR7                        
vJPbvJq2YgEQ2           .BP.L7ijIEuiivr7vii1PKgg5dRjXgUSujJ7JgJ7Piru1UKMBBQM2i             .2I:.                        
vrXP1Xg2vJjbL    .  .   sBBuXI1gBgE2SI7vIrrsIiSISdBSEZ1bggQv7Es:U77YLirugggDBBBgKUJrri:.:7IEP.                          
XU1UubPuLu7LY    .     :5RBgUBBPPdggBEUdqIKXviuJrYdPPq2PKKBqY1jrj75I1LL7UXZBBdPEQBP7jIIdKSBB.  .                        
sIDbX5X5KRBSE         .ZXLXI7q57UJ5IRUUZP5KZguivSv1S55bS12BMBjJ7dXBgZIqr7dqMEPBEQQ:       KB7         ...       ..      
PU7v5MPJ7KZPD         iBbU7v77:r7irYdIud5KqZPsrs2vYUsJuPP5SLKgQdEEgdPgMX7qvI5DXbMX       :BQ                            
511sSdZXI51vg.     .  LgXgU77iir5dddBMMBBBP5dP52S2gBQ2vL22RdBQBPQP15SdMR1Jivrr:MBr       SBv   .jDBMbuv:      ..        
vU52sujjUEq1E.   . .  2MrBDU5PQBZP7.:..irDQQPdBBRqi.      .:jXQMBPrIjXXBP1iuii.BE       .BX  rSQK:...i1dX7.             
KJ1svuqsrEgPK      .  v1rDQDBj:.          .LQBS.              .JBE.r7555RbbK55PBr    .  Kg  7QM.        7BBv            
PXdEu5PsLKv5di        7E1dKi                :J.                 :gg1iq1LsQRRYuBP   .r  KQi iBg           .2Q5.  .       
IjPP1ID5UJYdBY        rBBS    .                 .                :BErj7YU5ZPdBZ       vBv :Rd              IBi          
2UKK7JPXuIgQBb    .    bBi     .         .   .           .        EBPYv7srIKBB       vBr  sBi    .         .B1          
vvbb15d5bSPLPB:   .    rB:    ..          .                       :qBKQvYLJRK       iQ2 :ZBBr   .           Rv .        
SY57vDIKZLuuKBi        .BB.    .   .                             . bBXgudD5v      .2BBgqqbgBJ   .    ...   .E5          
v75vYqPPq5KPjJE:  .     iBBr    .                                 .BMvBQEv:       BBq1EsSQS5Bi  .   .      :BL          
vUUs7YuJrXJd7:BP     .   .PQqv:                          ..  .:77juBQJsi        rBQYiJU1JX5PRb:           vBL    .      
dZsY55RS1qjdqrBBL          .JPMRP77.   .:.....:.:i7vjuSqEEbXqqquL7. .         .jBQJvdR5vuuuJ5BBq:       isBB  . .       
BQ7v1KDu5qYSqsJgQ:             .r7IEPUs11uj25X21JJri::...                    7QB1rPQY2duIQKXZJ7BBdu7:isDZ5:    ..       
LYRgsvSUPqX1UUI2Bd.                                                       ii2MEgI7dRSJ1sSBX7SPXsPZBBXr77.               
 vBB1PBZMQggZDZMXgBBDgMRbbEQQRZPZRPKSPbDRBDKujsuYv25Ys2qSEPDMMddZgZMQBBBgQBQEPsqXJSqsIP52M5UPPsvERZi                    
s5QgPQBIDMMDgDgDgBBgEBBBBBBQQBBBBQBBBBBQQBBBBBBBBQBBBBBQBBBBBBBBBQBBBBBBBMBQgESDDSEKUPgU2qSqUrPBBv.   .                 
rrPBBgMDMQRRMQgQDMQBQBMgRQggDgRBBBgZgBBBQBBBBBBBBBBBBBS:     ..vbBBBQBQMbSQQMEYSuLI5uPKv1D77PBBXi      ...              
i LdMdKKqqPgZSgd1PZPSLXPXSZZXPZIQZJ5EKdDgMMdqYr.::.:bB:          LBXIQBKPgBquP2PZuUuUSXj5ZqXBB7                         
i:BP2j:vYs7q5sZI:2uvv7Ss7UYKs51r51rJLjDg7:          .BvPPgX1vrii:2Qi  vBbIMQuZrsDP55uu2XYdBQU:   .                      
rPBLJ27PXu7SP2QIvSJsPKgYPPisXq1Lg51ZBdr             2Q: .. .qBU.:vbv.  :IQBqiSs2KYLudKv7QQb.                            
BBXr7P1PXXsPSjD5757YPPE1JJiXPZj7sSQK:                1v     iBu   g7 .   iDBPQsIPuIP7vZB1.                       .      
MuiK7uKKj11Pj:S1UbuJXv2JJSKKLU2rSgX  .....:::...::.: .Bd..i.:bj .SB7 .::  KBgMv1gu2KqDBZ:  .:ii:ri::iiirrrviii7i.        
*/
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
inline int read()
{
	int f=1,x=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
inline void write(int x)
{
	if(x<0)putchar('-'),x=-x;
	if(x>9)write(x/10);
	putchar(x%10+'0');
}
inline void print(int x){write(x);puts("");}
struct node{int y,p;}w[60005];int ln;
bool cmp(node n1,node n2){return n1.y<n2.y;}
int bin[35],n,m,LS[60005];
char ch[35];
int gg[60005][30];//第i个前缀和 删去第j个字符的影响配哪个 
int pa[60005];//第i个数的前缀和
int get(int x)
{
	int l=1,r=n+1;
	while(l<=r)
	{
		int mid=(l+r)/2;
		if(w[mid].y<x)l=mid+1;
		else if(w[mid].y>x)r=mid-1;
		else return mid;
	}
	return -1;
}
//init
struct ask{int l,r,op;}A[60005];int pos[60005],block,ans[60005];
bool cap(ask n1,ask n2){return (pos[n1.l]!=pos[n2.l])?(pos[n1.l]<pos[n2.l]):n1.r<n2.r;}
int vis[60005],aa,l,r;
void adl(int p)
{
	aa+=vis[pa[p-1]]+(pa[r]==pa[p-1]);
	for(int j=1;j<=26;j++)if(gg[p-1][j]!=-1)aa+=vis[gg[p-1][j]]+(pa[r]==gg[p-1][j]);
	vis[pa[p-1]]++;
}
void dll(int p)
{
	vis[pa[p-1]]--;aa-=vis[pa[p-1]]+(pa[r]==pa[p-1]);
	for(int j=1;j<=26;j++)if(gg[p-1][j]!=-1)aa-=vis[gg[p-1][j]]+(pa[r]==gg[p-1][j]);
}
void adr(int p)
{
	vis[pa[p-1]]++;aa+=vis[pa[p]];
	for(int j=1;j<=26;j++)if(gg[p][j]!=-1)aa+=vis[gg[p][j]];
}
void dlr(int p)
{
	aa-=vis[pa[p]];
	for(int j=1;j<=26;j++)if(gg[p][j]!=-1)aa-=vis[gg[p][j]];
	vis[pa[p-1]]--;
}
int main()
{
	bin[1]=1;for(int i=2;i<=27;i++)bin[i]=bin[i-1]<<1;
	n=read();m=read();block=int(sqrt(double(n+1)));
	for(int i=1;i<=n;i++)pos[i]=(i-1)/block+1;
	scanf("%s",ch+1);
	for(int i=1;i<=n;i++)
	{
		int u=ch[i]-'a'+1;
		pa[i]=pa[i-1]^bin[u];
		w[i].y=pa[i];w[i].p=i;
	}
	w[n+1].y=0;w[n+1].p=0;
	sort(w+1,w+1+n+1,cmp);
	LS[1]=1;
	for(int i=2;i<=n+1;i++)
	{
		if(w[i].y!=w[i-1].y)LS[i]=LS[i-1]+1;
		else LS[i]=LS[i-1];
	}
	for(int i=0;i<=n;i++)
	{
		gg[i][0]=LS[get(pa[i])];
		for(int j=1;j<=26;j++)
		{
			int p=get(pa[i]^bin[j]);
			if(p!=-1)gg[i][j]=LS[p];
			else gg[i][j]=-1;
		}
	}
	for(int i=0;i<=n;i++)
		pa[i]=LS[get(pa[i])];
	//init
	for(int i=1;i<=m;i++)A[i].l=read(),A[i].r=read(),A[i].op=i;
	sort(A+1,A+1+m,cap);
	
	aa=0;
	for(int i=A[1].l;i<=A[1].r;i++)
	{
		vis[pa[i-1]]++;aa+=vis[pa[i]];
		for(int j=1;j<=26;j++)
			if(gg[i][j]!=-1)aa+=vis[gg[i][j]];
	}
	ans[A[1].op]=aa;
	l=A[1].l,r=A[1].r;
	for(int i=2;i<=m;i++)
	{
		while(l>A[i].l)adl(--l);
		while(l<A[i].l)dll(l++);
		while(r<A[i].r)adr(++r);
		while(r>A[i].r)dlr(r--);
		ans[A[i].op]=aa;
	}
	for(int i=1;i<=m;i++)print(ans[i]);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Rose_max/article/details/82782085