【站内外都有的题目】头痛3天了,救救我吧
  • 板块灌水区
  • 楼主_VirtualPoint_
  • 当前回复7
  • 已保存回复9
  • 发布时间2024/4/24 19:58
  • 上次更新2024/4/24 22:04:44
查看原帖
【站内外都有的题目】头痛3天了,救救我吧
794507
_VirtualPoint_楼主2024/4/24 19:58

对,就是这道题目

或者,你也可以在洛谷上看看这道题目

使尽浑身解数,站外评测机卡在3035ms,洛谷评测机惨不忍睹。有没有哪一位好心的大佬能过来帮我优化一下?谢谢!

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std; 

#pragma GCC optimize(3,"Ofast","inline")//一般这句话就可以了
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")

long long t;
long long n, m;
long long ans = 0;
long long logs[100005];
long long dp[100005][100];

template<typename type>
inline void read(type &x)
{
    x=0;bool flag(0);char ch=getchar();
    while(!isdigit(ch)) flag=ch=='-',ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    flag?x=-x:0;
}

template<typename type>
inline void write(type x,bool mode=1)//0为空格,1为换行
{
    x<0?x=-x,putchar('-'):0;static short Stack[50],top(0);
    do Stack[++top]=x%10,x/=10; while(x);
    while(top) putchar(Stack[top--]|48);
    mode?putchar('\n'):putchar(' ');
}

inline long long fgcd(long long x, long long y) {
    long long temp;
    while (y != 0) {
        temp = x % y;
        x = y;
        y = temp;
    }
    return x;
}

inline long long ask(long long x, long long y){
	long long lg = logs[y-x+1];

	return fgcd(dp[x][lg], dp[y-(1<<lg)+1][lg]);
}

int main() {
    read(t);

    while (t--) {
        read(n);
        ans = 0;
        
        for (long long i = 1; i <= n; ++i) {
            read(dp[i][0]);
        }

        long long lgn = __lg(n);
        
        for (long long j = 1; j <= lgn; ++j) {
            for (long long i = 1; (i+(1<<j)-1) <= n; ++i) {
                dp[i][j] = fgcd(dp[i][j-1], dp[i+(1<<(j-1))][j-1]);
            }
        }
        
        for (long long i = 1; i <= n; ++i) {
            long long x = i;

            while (x <= n) {
            	long long l = x, r = n+1;
            	long long k = ask(i, x);

            	while (l - r > 1) {
            		long long mid = (l + r) / 2;

            		if (ask(i, mid) == k) {
                        l = mid;
                    } else {
                        r = mid;
                    }
				}

				ans = max(ans, k * (l-i+1));
				x = l + 1;
			}
        }

        write(ans, 1);
    }
	return 0;
}
2024/4/24 19:58
加载中...