ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

bzoj4241/AT1219 历史研究(回滚莫队)

2020-06-30 19:03:26  阅读:248  来源: 互联网

标签:回滚 ch const int mo AT1219 bzoj4241 read void


bzoj4241/AT1219 历史研究(回滚莫队)

bzoj它爆炸了。

luogu

题解时间

我怎么又在做水题。

就是区间带乘数权众数。

经典回滚莫队,一般对于延长区间简单而缩短区间难的莫队题可以考虑。

思路就是对于所有l在同一块的询问,只记录在这一块以外的扩展贡献,而对于在块内的部分每次暴力记录贡献。

可以证明还是 $ O(n \sqrt {n} ) $ 。

#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
struct pat{int x,y;pat(int x=0,int y=0):x(x),y(y){}bool operator<(const pat &p)const{return x==p.x?y<p.y:x<p.x;}};
template<typename TP>inline void read(TP &tar)
{
	TP ret=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){ret=ret*10+(ch-'0');ch=getchar();}
	tar=ret*f;
}
template<typename TP,typename... Args>inline void read(TP& t,Args&... args){read(t),read(args...);}
namespace RKK
{
const int N=100011,m=10;
const int mo=1000000007;void doadd(int &a,const int &b){if((a+=b)>=mo) a-=mo;}
int add(int a,const int &b){return (a+=b)>=mo?a-mo:a;}
char str[N];int n,qaq;
int sum[N][m],isum[N][m];
int a[m][m],b[m][m];
void init()
{
	for(int i=0;i<m;i++) a[i][i]=b[i][i]=sum[0][i]=1;
	for(int i=1,c=str[i]-'a';i<=n;i++,c=str[i]-'a')for(int j=0;j<m;j++)
	{
		sum[i][j]=add(add(sum[i-1][j],sum[i-1][j]),mo-a[c][j]),a[c][j]=sum[i-1][j];
		isum[i][j]=b[c][j],b[c][j]=add(add(b[c][j],b[c][j]),mo-isum[i-1][j]);
	}
}
int main()
{
	scanf("%s",str+1),n=strlen(str+1),init();
	read(qaq);for(int rkk=1,l,r;rkk<=qaq;rkk++)
	{
		read(l,r);int ans=add(sum[r][9],mo-1);
		for(int i=0;i<m-1;i++) doadd(ans,mo-1ll*sum[r][i]*isum[l-1][i]%mo);
		printf("%d\n",ans);
	}
	return 0;
}
}
int main(){return RKK::main();}

标签:回滚,ch,const,int,mo,AT1219,bzoj4241,read,void
来源: https://www.cnblogs.com/rikurika/p/13215442.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有