题目描述

输入

输出

有M行,每个询问一行,输出结果mod 1,000,000,007的值。

样例输入

10 3

3 5 1 2 3 1 3 5 2 1

7 9

3 9

2 3

样例输出

10

19

6

数据范围

对于30%的数据,N,M<=1000

对于50%的数据,N,M<=30000

对于100%的数据,N,M<=100000

解法

离线不修改区间询问,考虑莫队算法。

利用线性筛法预处理出所有要用的逆元后。

显然每次容易O(1)处理。

总的时间复杂度为O(n1.5)。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
#define sqr(x) ((x)*(x))
#define ln(x,y) ll(log(x)/log(y))
using namespace std;
const char* fin="ex3568.in";
const char* fout="ex3568.out";
const ll inf=0x7fffffff;
const ll maxn=100007,mo=1000000007;
ll n,m,i,j,k,ks,l,r,tmp;
ll a[maxn],ans[maxn],tong[maxn],tx[maxn];
ll ny[maxn];
struct qu{
ll l,r,lk,id;
}b[maxn];
bool cmp(qu a,qu b){
return a.lk<b.lk || a.lk==b.lk && a.r<b.r;
}
ll qpower(ll a,ll b){
ll c=1;
while (b){
if (b&1) c=c*a%mo;
a=a*a%mo;
b>>=1;
}
return c;
}
void add(ll v){
tmp=(tmp+mo-tx[a[v]])%mo;
if (tong[a[v]]==0) tx[a[v]]=1;
tong[a[v]]++;
tx[a[v]]=(tx[a[v]]*a[v])%mo;
tmp=(tmp+tx[a[v]])%mo;
}
void del(ll v){
tmp=(tmp+mo-tx[a[v]])%mo;
tong[a[v]]--;
tx[a[v]]=(tx[a[v]]*ny[a[v]])%mo;
if (tong[a[v]]==0) tx[a[v]]=0;
tmp=(tmp+tx[a[v]])%mo;
}
int main(){
scanf("%d%d",&n,&m);
ks=(ll)(sqrt(n));
for (i=1;i<=n;i++) scanf("%d",&a[i]);
for (i=1;i<=100000;i++) ny[i]=qpower(i,mo-2);
for (i=1;i<=m;i++){
scanf("%d%d",&b[i].l,&b[i].r);
b[i].lk=(b[i].l-1)/ks+1;
b[i].id=i;
}
sort(b+1,b+m+1,cmp);
l=1;
r=0;
tmp=0;
for (i=1;i<=m;i++){
while (r<b[i].r) add(++r);
while (l>b[i].l) add(--l);
while (l<b[i].l) del(l++);
while (r>b[i].r) del(r--);
ans[b[i].id]=tmp;
}
for (i=1;i<=m;i++) printf("%lld\n",ans[i]);
return 0;
}

启发

涉及到预处理素数取模时的逆元,可由这道题对线筛的分析得到预处理逆元的可能性。


莫队的单次扩展一定要保证O(1)的时间。

最新文章

  1. Restful WebApi项目开发实践
  2. [SQL] SQL 基础知识梳理(五) - 复杂查询
  3. ASP.NET 网站从Sever2003迁移到Sever 2008部署后不能访问
  4. HTML 5 服务器发送事件
  5. Deferred解决JS同步问题
  6. UOJ#35 后缀排序
  7. 复制中的NOT FOR REPLICATION
  8. raft 分布式协议 -- mongodb
  9. Lammp安装过程
  10. Redis解决强制关闭Redis快照导致不能持久化错误
  11. Spire PDF for .NET 在ASP.NET中的使用 ---- 并非那么“美好”,有些挫折!
  12. 非洲儿童(南阳oj1036)(馋)
  13. servlet中的过滤器 国际化
  14. Scrapy教程--豆瓣电影图片爬取
  15. Spring Web MVC(三)之注解
  16. SQL Server 常用操作XML
  17. VS Code python初体验笔记
  18. Linux 配置selenium + webdriver 环境
  19. Chrome格式化JavaScript代码
  20. AngularJS的select设置默认值

热门文章

  1. idea报错:Error:java不支持发行版本5的解决方法
  2. 汇总下几个IP计算/转换的shell小脚本-转
  3. AIX系统搭建NFS服务器
  4. 啊啊我找不到web.xml怎么办呀~~
  5. Leetcode463.Island Perimeter岛屿的周长
  6. 超干货!Cassandra Java堆外内存排查经历全记录
  7. Hackerrank--Savita And Friends(最小直径生成树MDST)
  8. SpringBoot+Shiro+mybatis整合实战
  9. 自定义确定框(confirm)
  10. jodatime 计算时间差_统计程序运行耗时