P1890 gcd区间

题目描述

给定一行n个正整数a[1]..a[n]。

m次询问,每次询问给定一个区间[L,R],输出a[L]..a[R]的最大公因数。

输入输出格式

输入格式:

第一行两个整数n,m。

第二行n个整数表示a[1]..a[n]。

以下m行,每行2个整数表示询问区间的左右端点。

保证输入数据合法。

输出格式:

共m行,每行表示一个询问的答案。

输入输出样例

输入样例#1:

5 3
4 12 3 6 7
1 3
2 3
5 5
输出样例#1:

1
3
7

说明

对于30%的数据,n <= 100, m <= 10

对于60%的数据,m <= 1000

对于100%的数据,1 <= n <= 1000,1 <= m <= 1,000,000

满足区间加法,询问远大于数据量,st表最快

#include <cstdio>
#include <iostream>
#include <cstring> const int MAXN = 1000 + 10; inline void read(long long& x)
{
x = 0;char ch = getchar();char c = ch;
while(ch < '0' || ch > '9')c = ch, ch = getchar();
while(ch <= '9' && ch >= '0')x = x * 10 + ch - '0', ch = getchar();
if(c == '-')x = -x;
} inline int min(long long a, long long b){return a > b ? a : b;}
inline int max(long long a, long long b){return a > b ? b : a;} long long stlist[MAXN][30];
long long num[MAXN];
long long log2[MAXN];
long long pow2[MAXN];
long long n,m; inline int gcd(int a, int b)
{
if(a < b)
{
int tmp = a;
a = b;
b = tmp;
}
while(b)
{
int tmp = a % b;
a = b;
b = tmp;
}
return a;
} void yuchuli()
{
int M = 0;
while(pow2[M + 1] <= n)M ++;
for(int i = 1;i <= M;i ++)
{
for(int j = n;j > 0;j --)
{
stlist[j][i] = stlist[j][i - 1];
if(j + pow2[i - 1] <= n)stlist[j][i] = gcd(stlist[j + pow2[i - 1]][i - 1], stlist[j][i]);
}
}
} int stfind(int l, int r)
{
int M = 0;
while(pow2[M + 1] <= (r - l + 1))M ++;
return gcd(stlist[l][M], stlist[r - pow2[M] + 1][M]);
} long long tmp1, tmp2; int main()
{
read(n);read(m);
for(int i = 1;i <= n;i ++)
read(stlist[i][0]);
log2[0] = -1;
for(int i = 1;i <= n;i ++)
log2[i] = log2[i >> 1] + 1;
pow2[0] = 1;
for(int i = 1;i <= n;i ++)
pow2[i] = pow2[i - 1] << 1;
yuchuli();
for(int i = 1;i <= m;i ++)
{
read(tmp1);read(tmp2);
printf("%d\n", stfind(tmp1, tmp2));
}
return 0;
}

洛谷P1890 gcd区间 [2017年6月计划 数论09]的更多相关文章

  1. 洛谷P1855 榨取kkksc03 [2017年4月计划 动态规划 09]

    P1855 榨取kkksc03 题目描述 洛谷的运营组决定,如果一名oier向他的教练推荐洛谷,并能够成功的使用(成功使用的定义是:该团队有20个或以上的成员,上传10道以上的私有题目,布置过一次作业 ...

  2. 洛谷P2667 超级质数 [2017年6月计划 数论05]

    P2667 超级质数 题目背景 背景就是描述,描述就是背景...... 题目描述 一个质数如果从个位开始,依次去掉一位数字,两位数字,三位数字......直到只剩一位数字中间所有剩下的数都是质数,则称 ...

  3. 洛谷 P1890 gcd区间

    P1890 gcd区间 题目提供者 洛谷OnlineJudge 标签 数论(数学相关) 难度 普及/提高- 题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R] ...

  4. 洛谷——P1890 gcd区间

    P1890 gcd区间 题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R],输出a[L]..a[R]的最大公因数. 输入输出格式 输入格式: 第一行两个整数n ...

  5. 洛谷P1890 gcd区间

    题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R],输出a[L]..a[R]的最大公因数. 输入输出格式 输入格式: 第一行两个整数n,m. 第二行n个整数表 ...

  6. 洛谷P2426 删数 [2017年4月计划 动态规划12]

    P2426 删数 题目描述 有N个不同的正整数数x1, x2, ... xN 排成一排,我们可以从左边或右边去掉连续的i(1≤i≤n)个数(只能从两边删除数),剩下N-i个数,再把剩下的数按以上操作处 ...

  7. 洛谷P3459 [POI2007]MEG-Megalopolis [2017年6月计划 树上问题02]

    [POI2007]MEG-Megalopolis 题目描述 Byteotia has been eventually touched by globalisation, and so has Byte ...

  8. 洛谷P2327 [SCOI2005]扫雷 [2017年5月计划 清北学堂51精英班Day1]

    P2327 [SCOI2005]扫雷 题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一 ...

  9. 洛谷P1002 过河卒 [2017年4月计划 动态规划15]

    P1002 过河卒 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之 ...

随机推荐

  1. webpack 配置分离css插件

    以css配置示例,less与sass同理 1. 使用旧版的ExtractTextPlugin插件 安装 npm install extract-text-webpack-plugin@next --s ...

  2. c语言学习笔记 - 结构体位域

    在学习结构体的时候遇到了位域这个概念,位域主要是为了节省内存空间,比如用一个32位,4个字节的int存储一个开关变量时,会造成空间浪费,于是干脆就考虑在这个32划分不同的区域来存储数据,例如划出1位存 ...

  3. JS 根据今天的日期获取本周星期一与星期天的日期

    var now = new Date(); var nowTime = now.getTime() ; var day = now.getDay(); var oneDayTime = 24*60*6 ...

  4. HDU--2191 汶川地震购米(多重背包)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2191 分析:有资金n元,而市场有m种大米,每种大米价格不等,重量不等,数量不等, 并且只能整袋购买.如何用 ...

  5. EnumProcess 实现枚举进程

    BOOL WINAPI EnumProcesses ( _Out_writes_bytes_(cb) DWORD * lpidProcess, _In_ DWORD cb, _Out_ LPDWORD ...

  6. 初识css3 3d动画效果

    (先看我博客右上角的3d盒子动画效果,目前没做兼容处理,最好最新的chrome看)无意间看到网上css3写的3d动画效果,实在炫酷,以前理解为需要js去计算去写,没想到css直接可以实现.于是开始研究 ...

  7. LUOGU P2962 [USACO09NOV]灯Lights

    题目描述 Bessie and the cows were playing games in the barn, but the power was reset and the lights were ...

  8. JEECG-Boot 开发环境准备(一):技术点

    需要掌握的基础知识 序号 知识点 资料 1 Npm 命令 http://www.runoob.com/nodejs/nodejs-npm.html 2 Node.js 入门 http://www.ru ...

  9. MySQL示例数据导入

    从官网下载示例数据,参考压缩文件中的README.txt,整理所得 /******************* 示例数据导入 *******************/ /** 官网下载 http://d ...

  10. JVM学习-之对象的创建和内存分配

    最近看JVM内存模型,看了很多文章,大都讲到JVM将内存区域划分分:Mehtod-Area(No heap) 方法区,Heap(堆)区,Program Counter Register(程序计数器), ...