使尽浑身解数,站外评测机卡在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;
}