Magical GCD ----思维题

题目链接: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


你可能感兴趣的:(ACM_uva)