博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HDU4630]No Pain No Game
阅读量:5129 次
发布时间:2019-06-13

本文共 1574 字,大约阅读时间需要 5 分钟。

题目链接:

把所有询问离线处理。

从右往左扫一遍,设\(p_i\)表示目前扫过的数中含有因子\(i\)的最左边的数的下标。

对当前的数\(a_i\),扫描所有\(a_i\)的因子\(x\),那么将所有\(x|a_j(j\ge i)\)\(j\),开一个数组\(c\),将\(c_j\)\(x\)\(max\),那么若当前有询问\([i,r]\),则答案为\(\max_{k=1}^r\limits c_k\)

显然,若有多个\(j\),满足\(x|a_j\),那么右端的没有最左端的优,所以只用更新\(c_{p_x}\),同时更新\(p_x\)

然后查询前缀\(max\)用树状数组即可。

因为\(a\)是个排列,所有因子总数约为\(O(n\ln n)\)

时间复杂度 \(O(n\ln nlog_2n)\)

瞎写蜜汁\(rk7\),卡一卡应该很容易\(rk1\)开O2

代码:

#include 
#include
#include
#include
inline int Min(const int a,const int b){return a
b?a:b;}int t,n,a[50005],q,c[50005],Ans[50005],p[50005];std::vector
Fra[50005];std::vector
>Que[50005];//储存以当前点为左端的询问,一个是右端点,一个是询问的IDinline void Update(int x,const int v){if(x)for(;x<=n;x+=x&-x)c[x]=Max(c[x],v);}inline int Query(int x){int Res=0;for(;x;x^=x&-x)Res=Max(Res,c[x]);return Res;}int main(){ for(int i=1;i<=50000;++i) for(int j=i;j<=50000;j+=i) Fra[j].push_back(i);//预处理因子 for(scanf("%d",&t);t--;) { scanf("%d",&n); for(int i=1;i<=n;++i)scanf("%d",&a[i]),Que[i].clear(); scanf("%d",&q); for(int l,r,i=1;i<=q;++i) { scanf("%d%d",&l,&r); Que[l].push_back(std::make_pair(r,i)); } memset(c,0,sizeof c),memset(p,0,sizeof p); for(int i=n;i>=1;--i) { for(int j=0;j<(int)Fra[a[i]].size();++j) { Update(p[Fra[a[i]][j]],Fra[a[i]][j]); p[Fra[a[i]][j]]=i; }//先更新后查询 for(int j=0;j<(int)Que[i].size();++j) Ans[Que[i][j].second]=Query(Que[i][j].first); } for(int i=1;i<=q;++i)printf("%d\n",Ans[i]); } return 0;}

转载于:https://www.cnblogs.com/LanrTabe/p/10374520.html

你可能感兴趣的文章
利用python将txt文件转换为csv
查看>>
后缀转中缀的另一种方法——二叉树的遍历
查看>>
[SQLite]SQL语法
查看>>
SSM+shiro及相关插件的整合maven所有依赖,详细注释版,自用,持续更新
查看>>
ef实现左关联查询
查看>>
关于团队建设和个人成长
查看>>
AcWing 286. 选课 (树形依赖分组背包)打卡
查看>>
9.17 基于ajax上传文件
查看>>
axis2调用.net写的webservice接口实现,指定参数名
查看>>
[php]禁用缓存
查看>>
[java] 获取pdf/word文档文本内容
查看>>
关于TOMCAT的 ROOT/WEB-INF/web.xml的配置
查看>>
python内置函数、匿名函数、递归
查看>>
Eclipse与maven的环境搭建
查看>>
mysql where执行顺序
查看>>
Java遇见HTML——JSP篇之JSP指令与动作元素
查看>>
Activiti 启动事件(Start Event)
查看>>
Angularjs 1.x入门 踩坑记录(包含入门demo练习)
查看>>
关于成长过程的一些建议
查看>>
(FLEX)AS3,for循环里面加监听,只能取到最后一个元素的取巧方法解决方法
查看>>