题目链接:https://cn.vjudge.net/problem/49313/origin
题目大意:定义一个魔法GCD,规则是用[l,r]区间内的数的gcd*区间长度,求这个魔法GCD的最大值。
这个题上来竟然wa了一发,我们记录最大公约数及其最左的区间
举个栗子:
30 60 20 20 20
我们从第一个数开始求:
(30,1)
(30,1),(60,2)
(10,1),(20,2),(20,2)
(10,1),(20,2),(20,2),(20,2)
(10,1),(20,2),(20,2),(20,2),(20,2)
括号里的第一个参数代表gcd的值,第二个数代表着同一个gcd值最左边的区间
这样暴力一发就好了
代码:
#include
#include
#include
#include
#include
#define LL long long
using namespace std;
struct node{
LL data;
LL pos;
}xin1[200000],xin2[200000];
LL a[200000];
bool cmp(struct node a,struct node b){
if(a.data==b.data){
return a.pos