思路:树状数组统计。待验证,不知道是否对。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#define lowbit(x) (x&(-x))
#define Maxn 200010
using namespace std;
int C[Maxn],vi[Maxn],pre[Maxn],n,num[Maxn],ans[Maxn],ov[Maxn];
struct Qu{
int l,r,i;
}q[Maxn];
int cmp(Qu a,Qu b)
{
return a.r<b.r;
}
void update(int pos,int val)
{
while(pos){
C[pos]+=val;
pos-=lowbit(pos);
}
}
int sum(int pos)
{
int s=;
while(pos<=n){
s+=C[pos];
pos+=lowbit(pos);
}
return s;
}
int main()
{
int m,i,j;
while(scanf("%d%d",&n,&m),n||m){
memset(C,,sizeof(C));
memset(vi,,sizeof(vi));
memset(pre,,sizeof(pre));
memset(ov,,sizeof(ov));
for(i=;i<=n;i++)
scanf("%d",num+i);
for(i=;i<=m;i++){
scanf("%d%d",&q[i].l,&q[i].r);
q[i].i=i;
}
sort(q+,q++m,cmp);
int r=,temp,pos;
for(i=;i<=n;i++){
update(i,);
pos=;
for(j=;j*j<=num[i];j++){
if(num[i]%j) continue;
if(!vi[pre[j]]&&pre[j]) {
update(pre[j],-);
if(ov[pre[j]])
update(ov[pre[j]],);
vi[pre[j]]=;
}
pos=max(pos,pre[j]);
pre[j]=i;
if(j*j==num[i]) continue;
temp=num[i]/j;
if(!vi[pre[temp]]&&pre[temp]){
update(pre[temp],-);
if(ov[pre[temp]])
update(ov[pre[temp]],);
vi[pre[temp]]=;
}
pos=max(pos,pre[temp]);
pre[temp]=i;
}
if(!vi[pre[num[i]]]&&pre[num[i]]){
update(pre[num[i]],-);
if(ov[pre[num[i]]])
update(ov[pre[num[i]]],);
vi[pre[num[i]]]=;
}
pos=max(pos,pre[num[i]]);
pre[num[i]]=i;
if(pos){
update(pos,-);
ov[i]=pos;
}
while(r<=m&&q[r].r==i){
ans[q[r].i]=sum(q[r].l);
r++;
}
}
for(i=;i<=m;i++)
printf("%d\n",ans[i]);
}
return ;
}

最新文章

  1. 浅谈单片机中C语言与汇编语言的转换
  2. Cordova webapp实战开发:(6)如何写一个iOS下获取APP版本号的插件?
  3. iostat命令
  4. sessionStorage、localStorage简介
  5. IE浏览器上传文件时本地路径变成”C:\fakepath\”的问题【转】
  6. UPDATE语句中使用JOIN
  7. nodejs-fs使用
  8. MySQL5.7 linux二进制安装
  9. javascript book
  10. AprioriTID algorithm
  11. Afinal开源框架中FinalActivity的使用
  12. 《深度探索C++对象模型》笔记——Data语意学
  13. db2_errroecode
  14. ASP.NET MVC 分页问题
  15. shell编程之SHELL基础(1)
  16. Node.js 命令行工具的编写
  17. 浙江省住房和城乡建设厅 http://www.zjjs.com.cn/ 漏洞提示
  18. 第28月第22天 iOS动态库
  19. 5阶m序列
  20. curl命令的基本使用

热门文章

  1. Mybatis基础进阶学习2
  2. VMware运行时“内部错误”的解决方法
  3. 归并排序算法Java实现
  4. Echarts 背景渐变柱状图
  5. 菜鸟学Linux - Tarball安装的一般步骤
  6. Idea中maven依赖图查看
  7. hadoop中namenode发生故障的处理方法
  8. Python基础&mdash;&mdash;安装运行
  9. [转] PHP在不同页面之间传值的三种常见方式
  10. 《Cracking the Coding Interview》——第18章:难题——题目13