4630 no pain no game 树状数组

时间:2022-01-24 09:15:22

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4630

题意:给你N个数,然后给你M个询问,每个询问包含一个l 一个r,问你lr 这个区间中任意两个数最大的公约数。

思路:以为是l,r所以,只跟l后面的有关,所以把询问排序,数组a[]从后往前枚举约数,标记下这个约数最早出现的位置,如果这个约数出现了,那就让这个数更新一下最大的保存在树状数组中,如果没出现,那么就标记一下位置就好~这样的后面的答案会影响前面的但是前面的不会影响后面的。

 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <queue>
#define loop(s,i,n) for(i = s;i < n;i++)
#define cl(a,b) memset(a,b,sizeof(a))
#define lowbit(x) x&-x
using namespace std;
struct node
{
int l,r,num;
}q[];
int n;
int cmp(const struct node a,const struct node b)
{
return a.l > b.l;
} int a[];
int pre[];
int c[]; void update(int x,int d)
{
while(x <= n)
{
c[x] = max(c[x],d);
x += lowbit(x);
}
} int getres(int x)
{
int res = ;
while(x > )
{
res = max(c[x],res);
x -= lowbit(x);
} return res; }
int ans[];
int main()
{
int t; while (~scanf("%d",&t))
{ while(t--)
{
int cnt = ;
scanf("%d",&n);
int i,j;
loop(,i,n+)
scanf("%d",&a[i]); int m;
scanf("%d",&m); loop(,i,m)
{
scanf("%d %d",&q[i].l,&q[i].r);
q[i].num = i;
} sort(q,q+m,cmp); cl(c,);
cl(pre,-); for(i = n;i > ; i--)
{
for(j = ;j*j <= a[i];j++)
{
if(a[i]%j == )
{
if(pre[j] != -)
update(pre[j],j); pre[j] = i; if(j != (a[i]/j))
{
if(pre[a[i]/j] != -)
update(pre[a[i]/j],a[i]/j);
pre[a[i]/j] = i;
}
}
}
while(cnt < m && q[cnt].l == i)
{
ans[q[cnt].num] = getres(q[cnt].r);
cnt++;
}
} loop(,i,m)
printf("%d\n",ans[i]);
}
}
return ;
}

4630 no pain no game 树状数组的更多相关文章

  1. HDU 4630 No Pain No Game 树状数组&plus;离线操作

    题意:给一串数字,每次查询[L,R]中两个数的gcd的最大值. 解法:容易知道,要使取两个数让gcd最大,这两个数最好是倍数关系,所以处理出每个数的所有倍数,两两间根据倍数关系形成一条线段,值为该数. ...

  2. HDU 4630 No Pain No Game&lpar;树状数组&rpar;

    题目链接 看的别人的题解,离线之后,按r排序,枚举1-n,利用pre[j],存上次j的倍数出现的位置,树状数组里统计的当前位置到最后的最大值,树状数组是求区间最值其实应该很麻烦的,但是此题用法只是求到 ...

  3. HDU 4630 No Pain No Game 树状数组&plus;离线查询

    思路参考 这里. #include <cstdio> #include <cstring> #include <cstdlib> #include <algo ...

  4. BZOJ 1103&colon; &lbrack;POI2007&rsqb;大都市meg &lbrack;DFS序 树状数组&rsqb;

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  5. bzoj1878--离线&plus;树状数组

    这题在线做很麻烦,所以我们选择离线. 首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置. 然后对与每种颜色第一次出现的位置x,将a[x]++. 将每个询问按左端点排序,再从左往右扫, ...

  6. codeforces 597C C&period; Subsequences&lpar;dp&plus;树状数组&rpar;

    题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...

  7. BZOJ 2434&colon; &lbrack;Noi2011&rsqb;阿狸的打字机 &lbrack;AC自动机 Fail树 树状数组 DFS序&rsqb;

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  8. BZOJ 3529&colon; &lbrack;Sdoi2014&rsqb;数表 &lbrack;莫比乌斯反演 树状数组&rsqb;

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1399  Solved: 694[Submit][Status] ...

  9. BZOJ 3289&colon; Mato的文件管理&lbrack;莫队算法 树状数组&rsqb;

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 2399  Solved: 988[Submit][Status][Di ...

随机推荐

  1. js自动切换图片

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. JSON 之 SuperObject&lpar;8&rpar;&colon; 关于乱码的几种情况 - 向 Henri Gourvest 大师报告

    这几天学习 JSON - SuperObject, 非常幸运地得到了其作者 Henri Gourvest 大师的同步指点! (Henri 大师也是 DSPack 和 GDI+ 头文件的作者; 大师是法 ...

  3. HNU OJ10086 挤挤更健康 记忆化搜索DP

    挤挤更健康 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 339, A ...

  4. 树莓PI安装jdk1&period;8&comma;ant&comma;maven【转】

    http://the.taoofmac.com/space/hw/RaspberryPi/JDK%20Installation jdk--------------------------------- ...

  5. nodejs学习:sails框架的学习

    上周通过搭建CMS系统接触到了sails框架,知道一些ORM的概念.这周开始深入后台数据交互,发现twenty框架的数据结构在sails上又设计了一番(比如node.category),不得不说师哥就 ...

  6. iOS UIKit:viewController之Segues &lpar;4&rpar;

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  7. Android EditText 无法换行

    问题 关于控制是否换行的属性android:singleLine 当值为true的时候,只能一行,不换行 当值为false的时候,可以换行 但是现在遇到一个问题: <EditText andro ...

  8. 【笔记】Loadrunner添加OS类型为Linux的服务器

    参考文章:http://www.51testing.com/?uid-145985-action-spacelist-type-blog-itemtypeid-11954 在给Loadrunner添加 ...

  9. SpringBoot使用Elastic-Job

    本文介绍SpringBoot整合Elastic-Job分布式调度任务(简单任务). 1.有关Elastic-Job Elastic-Job是当当网开源的分布式任务调度解决方案,是业内使用较多的分布式调 ...

  10. 扩展C&num;与元编程

    扩展C#与元编程 https://www.cnblogs.com/knat/p/4580393.html https://www.cnblogs.com/knat/p/4584023.html 扩展C ...