某次模拟赛的T1。

刚开始怀疑是RMQ......我真是太弱了QAQ

题目传送门

正解是离线操作,把所有询问按r从小到大排序。

然后把数从左到右处理,处理完第i个数,就可以回答所有r==i的询问了。

分解因数,记录下来每个因数上一次出现的位置。

又遇到这个因数,就把上一次的位置加进线段树,把这一次的位置记录下来。

这样线段树里有这个数当且仅当这个数出现了两次以上。

此时这个数显然是备选的合法答案之一,然后询问的时候询问区间最大值就行了。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int t;
int n,m;
int a[];
int pre[]; struct query
{
int ql,qr,ans,id;
void get(){scanf("%d%d",&ql,&qr);}
}q[]; int cmp(query w,query e){return w.qr<e.qr;}
int cmpb(query w,query e){return w.id<e.id;} int mx[],lb[],rb[]; void build(int p,int l,int r)
{
lb[p]=l,rb[p]=r,mx[p]=-;
if(l==r)return;
int mid=(l+r)>>;
build(p<<,l,mid);
build(p<<|,mid+,r);
} void pushup(int p)
{
mx[p]=max(mx[p<<],mx[p<<|]);
} void change(int p,int pos,int val)
{
if(lb[p]==rb[p])
{
mx[p]=max(mx[p],val);
return;
}
int mid=(lb[p]+rb[p])>>;
if(pos<=mid)change(p<<,pos,val);
else change(p<<|,pos,val);
pushup(p);
} int ask(int p,int l,int r)
{
if(l<=lb[p]&&r>=rb[p])return mx[p];
int ret=-,mid=(lb[p]+rb[p])>>;
if(l<=mid)ret=max(ask(p<<,l,r),ret);
if(r>mid)ret=max(ask(p<<|,l,r),ret);
return ret;
} void work()
{
scanf("%d",&n);
build(,,n);
memset(pre,,sizeof(pre));
for(int i=;i<=n;i++)scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=;i<=m;i++)q[i].get(),q[i].id=i;
sort(q+,q+m+,cmp);
int nw=;
for(int i=;i<=n;i++)
{
for(int k=;k*k<=a[i];k++)
{
if(a[i]%k)continue;
if(pre[k])change(,pre[k],k);
if(pre[a[i]/k]&&a[i]!=k*k)
change(,pre[a[i]/k],a[i]/k);
pre[k]=pre[a[i]/k]=i;
}
while(q[nw].qr==i)
{
if(q[nw].ql>=q[nw].qr)q[nw].ans=;
else q[nw].ans=ask(,q[nw].ql,q[nw].qr);
nw++;
}
}
sort(q+,q+m+,cmpb);
for(int i=;i<=m;i++)printf("%d\n",q[i].ans);
} int main()
{
scanf("%d",&t);
while(t--)work();
return ;
}

[hdu4630] No Pain No Game的更多相关文章

  1. 【HDU4630 No Pain No Game】 dp思想+线段树的离线操作

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题意:给你n个数据范围在[1,n]中的数,m个操作,每个操作一个询问[L,R],让你求区间[L, ...

  2. 2013 Multi-University Training Contest 3

    HDU-4622 Reincarnation 题意:给定一个字符串,有Q次询问,每次询问得出区间[L, R]内有多少个不同的子串. 分析:后缀数组搞,不过hash+dp也能够搞定这题,详解见http: ...

  3. Your pain

    Your pain is the breaking of the shell that encloses your understanding. 你的痛苦是你那包裹知识的皮壳的破裂.

  4. HDU 4630 No Pain No Game 线段树 和 hdu3333有共同点

    No Pain No Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  5. No Pain No Game

    hdu4630:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题意:给定一个排序,求区间最大GCD. 题解:离散树状数组.首先把查询按左端点从大到小排序 ...

  6. Pain for friend

    For a guy who has experienced his fair share of mysteries,on mystery,I still can't figure out is why ...

  7. etymon word write alb pain high alt increase large agency ag lose weight fat assist out~3

        1● alb   2● write =====>rait     1● alg 2● pain   痛,疼痛           1● alt 2● high   高         1 ...

  8. 41 Pain and Pain Management 疼痛与疼痛管理

    Pain and Pain Management 疼痛与疼痛管理 ①Years ago,doctors often said that pain was a normal part of life.I ...

  9. HDU 4630 No Pain No Game(2013多校3 1010题 离线处理+树状数组求最值)

    No Pain No Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

随机推荐

  1. 201409-2 画图 Java

    思路: 法1:计算每个矩形的小方块,去掉重复的 法2:二维数组,需要涂色就置flag为1,最后遍历输出,不会有重复计算 import java.util.Scanner; public class M ...

  2. beta函数与置信度估计

    可信度的估计 二项分布中的\(p\) 服从Beta分布 $ {\rm beta}(\alpha, \beta)$, 密度函数 \(\frac1{B(\alpha, \beta)} x^{\alpha- ...

  3. UML-如何进行对象设计?

    之前的章节,学过了OOA,以及交互图+类图.本章主要讲述OOD.OOD就是面向对象设计,那如何进行对象设计? 概览 1.输入制品 注:这些制品并非都必要. 2.活动 1).针对输入的制品,采用什么样的 ...

  4. tensorflow2使用中的一些问题

    from tensorflow import keras import tensorflow as tf import numpy as np print(tf.__name__,tf.__versi ...

  5. sftp安装(linux)

    --整理于网络 1. 查看openssh版本ssh -Vopenssh版本必须大于4.8p12. 创建sftp组groupadd sftp3. 创建sftp用户useradd -g sftp -s / ...

  6. 吴裕雄--天生自然TensorFlow高层封装:Keras-RNN

    # 1. 数据预处理. from keras.layers import LSTM from keras.datasets import imdb from keras.models import S ...

  7. mqtt协议系统设计参考

    作者:极寒链接:https://zhuanlan.zhihu.com/p/28525517来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 回顾自己的工作经历最遗憾的是没 ...

  8. redhat下libreoffice 的安装

    1.第一次安装libreoffic时是用网络yum源安装的,但是装好之后不能用,找了好久没有找出问题,后来从官网下载安装包后安装就可以了. 下载地址:https://zh-cn.libreoffice ...

  9. postgreSQL命令大全(更新中)

    1.PostgreSQL索引的建立https://blog.csdn.net/jubaoquan/article/details/78850899: 2.PostgreSQL9中索引的原理和效率查询h ...

  10. 十一、linux-mysql的多种日志和引擎文件实战

    一.多种日志 mysql生成或者相关联的日志文件种类繁多,本节重点关注与mysql数据库服务相关的几类日志文件. 错误日志(error  log) :记录mysql服务进程mysqld在启动/关闭或者 ...