[hdu4630] No Pain No Game
某次模拟赛的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的更多相关文章
- 【HDU4630 No Pain No Game】 dp思想+线段树的离线操作
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题意:给你n个数据范围在[1,n]中的数,m个操作,每个操作一个询问[L,R],让你求区间[L, ...
- 2013 Multi-University Training Contest 3
HDU-4622 Reincarnation 题意:给定一个字符串,有Q次询问,每次询问得出区间[L, R]内有多少个不同的子串. 分析:后缀数组搞,不过hash+dp也能够搞定这题,详解见http: ...
- Your pain
Your pain is the breaking of the shell that encloses your understanding. 你的痛苦是你那包裹知识的皮壳的破裂.
- 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 ...
- No Pain No Game
hdu4630:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题意:给定一个排序,求区间最大GCD. 题解:离散树状数组.首先把查询按左端点从大到小排序 ...
- Pain for friend
For a guy who has experienced his fair share of mysteries,on mystery,I still can't figure out is why ...
- 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 ...
- 41 Pain and Pain Management 疼痛与疼痛管理
Pain and Pain Management 疼痛与疼痛管理 ①Years ago,doctors often said that pain was a normal part of life.I ...
- 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 ...
随机推荐
- 计蒜客 王子救公主(DFS)
一天,蒜头君梦见自己当上了王子,但是不幸的是,自己的公主被可恶的巫婆抓走了.于是蒜头君动用全国的力量得知,自己的公主被巫婆抓进一个迷宫里面.由于全国只有蒜头君自己可以翻越迷宫外的城墙,蒜头君便自己一人 ...
- [Algo] 87. Max Product Of Cutting Rope
Given a rope with positive integer-length n, how to cut the rope into m integer-length parts with le ...
- 吴裕雄--天生自然 JAVA开发学习:StringBuffer、数组
public class Test{ public static void main(String args[]){ StringBuffer sBuffer = new StringBuffer(& ...
- PAT Advanced 1024 Palindromic Number (25) [数学问题-⼤整数相加]
题目 A number that will be the same when it is written forwards or backwards is known as a Palindromic ...
- 调用新浪短地址转换api的一个测试
import base64 import requests url="http://www.~~~~.com" headers={ "User-Agent":& ...
- ios swift 判断uiviewcontroller时push present 进来的 还是pop进来的
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) //显示navbar self.navi ...
- Python模块——base64
简介 base64模块是用来作base64编码解码,常用于小型数据的传输.编码后的数据是一个字符串,其包括a-z.A-Z.0-9./.+共64个字符,即可用6个字节表示,写出数值就是0-63.故三个字 ...
- Golang 热编译rizla 插件
今天在写gin接口的时候,每次添加或修改个接口都需要重启项目才能测试,感觉很麻烦. 因为beego有bee工具,bee run启动项目fsnotify会监控文件变动,经查发现在iris项目中有个插件支 ...
- 蓝桥杯 sine之舞(递归)
Description 最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功.所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力.不妨 ...
- Docker搭建RabbitMQ(阿里云)
0 环境 系统环境:centos7 服务器:阿里云 1 正文 1 获取安装RabbitMQ https://hub.docker.com/_/rabbitmq 默认rabbitmq镜像是不带web端管 ...