题目链接

BZOJ5389

题解

太\(sb\)了,这种题都想不出来

发现复杂度允许\(n\sqrt{n}\),我们可以对于每个位置\(\sqrt{n}\)枚举约数,然后维护比例的最晚出现的位置,维护每种数出现的最晚位置

询问按\(r\)排序,在维护的同时回答询问,只需看该比例最晚位置是否在\(l\)右侧即可

这样做事默认\(a[y]\)在\(a[x]\)左边,反过来再做一次即可

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 100005,maxm = 100005,INF = 1000000000;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
return out * flag;
}
int n,m,A[maxn],f[maxn],g[maxn],ans[maxn];
struct Que{int l,r,b,id;}q[maxn];
inline bool operator <(const Que& a,const Que& b){
return a.r < b.r;
}
void work(){
sort(q + 1,q + 1 + m);
cls(f); cls(g);
int pos = 1;
for (int i = 1; i <= n; i++){
for (int j = 1; j * j <= A[i]; j++)
if (A[i] % j == 0){
g[j] = max(g[j],f[A[i] / j]);
g[A[i] / j] = max(g[A[i] / j],f[j]);
}
f[A[i]] = i;
while (pos <= m && q[pos].r <= i){
ans[q[pos].id] |= (g[q[pos].b] >= q[pos].l);
pos++;
}
}
}
int main(){
n = read(); m = read();
REP(i,n) A[i] = read();
REP(i,m) q[i].id = i,q[i].l = read(),q[i].r = read(),q[i].b = read();
work();
reverse(A + 1,A + 1 + n);
REP(i,m) q[i].l = (n - q[i].l + 1),q[i].r = (n - q[i].r + 1),swap(q[i].l,q[i].r);
work();
REP(i,m) puts(ans[i] ? "Yes" : "No");
return 0;
}

最新文章

  1. Probe在性能测试中的使用方式简介
  2. Emacs使用projectile-rails 插件注意事项
  3. ajax请求加载Loading或错误提示
  4. Python 调试 PDB
  5. poj 3468 A Simple Problem with Integers 线段树第一次 + 讲解
  6. JqueryMobile动态生成listView并实现刷新的两种方法
  7. JS判断请求来自Android手机还是iPhone手机,根据不同的手机跳转到不同的链接。
  8. C++游戏编程(一开篇)
  9. python - Django: Converting an entire set of a Model's objects into a single dictionary - Stack Overflow
  10. C库 - 常用文件IO函数
  11. [转]centos 6.5安装caffe
  12. vue.js路由参数简单实例讲解------简单易懂
  13. oracle存储过程的创建和使用
  14. 获取UILabel的numberOfLine
  15. linux内核剖析(八)进程间通信之-管道
  16. Ubuntu 16.04 ROS环境配置
  17. 将GETDATE()转换为指定日期格式的varchar类型
  18. 学习笔记之C / C++
  19. SQL 用到的操作符
  20. 【maven】在idea上创建maven多模块项目

热门文章

  1. Catlike学习笔记(1.2)-使用Unity画函数图像
  2. idea_debug
  3. mac zsh不自动加载~/.bashrc
  4. 【CentOS 7】nginx配置web服务器
  5. Qt tableWidget 空单元格 获取选中行行号
  6. Python序列之元组 (tuple)
  7. Python序列之列表 (list)
  8. 使用 PropTypes 进行类型检查
  9. Tornado之笔记集合
  10. 解决 vuex mapGetters 语法报错 (Unexpected token )