洛谷1890 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
0 < 数字大小 <= 1,000,000,000

解题思路

这个题用的类似区间型DP,但是只能过8个点,求优化,求优化

 1 program gcd1;
 2 var
 3 f:array[1..1000,1..1000] of longint;
 4 n,m,i,j,l,r,p:Longint;
 5 function gcd(x,y:Longint):longint;
 6 begin
 7     if x mod y=0 then exit(y)
 8     else exit(gcd(y,x mod y));
 9 end;
10 begin
11     read(n,m);
12     for i:=1 to n do read(f[i,i]);
13     for p:=1 to n-1 do
14         for i:=1 to n-p do
15         begin
16             j:=i+P;
17             f[i,j]:=gcd(f[i,j-1],f[i+1,j]);
18         end;
19      for i:=1 to m do
20      begin
21         read(l,r);
22         writeln(f[l,r]);
23      end;
24 end.  
时间: 2024-08-11 10:31:52

洛谷1890 gcd区间的相关文章

洛谷P1890 gcd区间 [2017年6月计划 数论09]

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%的数据,

洛谷——P1890 gcd区间

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 说明 对于3

洛谷P2879 [USACO07JAN]区间统计Tallest Cow

To 洛谷.2879 区间统计 题目描述 FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positive integer height (which is a bit of secret). You are told only the height H (1 ≤ H ≤ 1,000,000) of the tallest cow along with th

洛谷——P2434 [SDOI2005]区间

P2434 [SDOI2005]区间 题目描述 现给定n个闭区间[ai, bi],1<=i<=n.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间的方案.你的输出应该按照区间的升序排列.这里如果说两个区间[a, b]和[c, d]是按照升序排列的,那么我们有a<=b<c<=d. 请写一个程序: 读入这些区间: 计算满足给定条件的不相交闭区间: 把这些区间按照升序输出. 输入输出格式 输入格式: 第一行包含一个整数n,3<=n&l

洛谷P2398 GCD SUM

题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入格式: n 输出格式: sum 输入输出样例 输入样例#1: 2 输出样例#1: 5 说明 数据范围 30% n<=3000 60% 7000<=n<=7100 100% n<=100000 ---------------------------------- 又是数论QAQ 我们可以枚举k ans=∑k*f[k]

洛谷 P2879 [USACO07JAN]区间统计Tallest Cow

传送门 题目大意: n头牛,其中最高身高为h,给出r对关系(x,y) 表示x能看到y,当且仅当y>=x并且x和y中间的牛都比 他们矮的时候,求每头牛的最高身高. 题解:贪心+差分 将每头牛一开始都设为最高高度. 每一对关系(x,y),我们将[x+1,y-1]这个区间的身高变为 min(x,y)-1.这样是不对了.因为要维护[x+1,y-1]这个区间里 各个元素的大小关系,所以要将[x+1,y-1]的元素身高都减1. 一开始我是用线段树做的,后来发现题解用的差分. 没有询问的区间修改,差分做就好了

洛谷P3205合唱队——区间DP

题目:https://www.luogu.org/problemnew/show/P3205 枚举点,分类为上一个区间的左端点或右端点,满足条件便+=即可: 注意不要重复(当l=2时). 代码如下: #include<iostream> #include<cstdio> using namespace std; int n,h[1005],dp[1005][1005][3],p=19650827; int main() { scanf("%d",&n);

洛谷 P2879 [USACO07JAN]区间统计Tallest Cow 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=2879 题目描述 FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positive integer height (which is a bit of secret). You are told on

洛谷P2982 [USACO10FEB]慢下来Slowing down(线段树 DFS序 区间增减 单点查询)

To 洛谷.2982 慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) cows conveniently numbered 1..N move from the barn to her private pasture. The pastures are organized as a tree, with the barn being on pasture 1. Exactly N-1 cow