某次模拟赛的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. 为什么Web前端变的越来越复杂,变得更加难学了

    前端发展了也有些年头了,曾记得很多年前,聊起前端,都觉得是很简单,那个时候都没有前端工程师这个职位.可现在,前端已经逆袭了,已经不是原来的样子了,各种技术层出不穷,显的越来越高深莫测了.前端真的变得那 ...

  2. Python笔记_第三篇_面向对象_2.构造函数和析构函数(含self说明)

    1. 构造函数: 为什么要有构造函数? 打一个比方:类的创建就是好比你创建了好了一种格式的房间,你租给上一个住户的后,里面会对方很多“垃圾”和不规则的物品摆放.构造函数就是下一个住户再使用的时候进行物 ...

  3. tomcat设置远程监听端口(linux&windows)

    1.Linxu系统: apach/bin/startup.sh开始处中增加如下内容: declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent ...

  4. 吴裕雄--天生自然 pythonTensorFlow图形数据处理:解决module 'tensorflow' has no attribute 'Session'

    原因:因为是tensorflow 2.0版本

  5. 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建)

    黑马eesy_15 Vue:02.常用语法 黑马eesy_15 Vue:03.生命周期 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建) 黑马eesy_15 Vue:04.综合案例(前端 ...

  6. vue slot插槽v-show不控制显示隐藏

    vue中想控制插槽的显示隐藏,用v-show是不起任何作用的,改用v-if 可以生效.

  7. memory barrier 内存栅栏 并发编程

    并发编程 memory barrier (内存栅栏) CPU级 1.CPU中有多条流水线,执行代码时,会并行进行执行代码,所以CPU需要把程序指令 分配给每个流水线去分别执行,这个就是乱序执行: 2. ...

  8. VS2015提示资源视图加载失败

    关闭VS打开的resource,h这个文件,然后重启VS就行了.网上有很多其他的说法,我本地尝试始终不行,暴力解决. 今天发现,其实是不用重启的,直接对rc文件右键保存,就可以正常打开了......

  9. GIS开源库OpenSceneGraph(OSG)、OSGEarth、GDAL、Qt、CGAL、Boost

    GIS开源有这些库:OpenSceneGraph(OSG).OSGEarth.GDAL.Qt.CGAL.Boost

  10. springboot集成aop日志

    日常开发中假如是前后端完全分离,我们会习惯用浏览器去调用controller的接口来测试.这一个过程普通的日志功能会记录sql参数等一些基本信息.但是假如项目越来越庞大,我们的包越来越多,在维护项目和 ...