这个。。。TLE了后四个 大佬看看啊

P1890 gcd区间

~~太暴力了~~
by    吾皇 @ 2019-08-14 20:47:22


建议暴力的时候二分,gcd等于1直接返回,左右端点相等直接返回; ```cpp #include<bits/stdc++.h> using namespace std; int n,m,l,r; int a[10011]; int gcd(int a,int b) { if(b==0)return a; return gcd(b,a%b); } int ask(int l,int r) { if(l == r)return a[l]; int ans=a[l] ,tot = a[r]; int mid = (l + r) >> 1; for(int i = r ; i >= mid + 1 ; i--){ ans = gcd(a[i],ans); if(ans == 1)return 1; } for(int i = l + 1;i <= mid ; i++) { ans=gcd(a[i],ans); if(ans == 1)return 1; } return ans; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } for(int i=1;i<=m;i++) { scanf("%d%d",&l,&r); int t=ask(l,r); printf("%d\n",t); } return 0; } ```
by 放学后茶会 @ 2020-12-02 18:29:29


注意开氧气
by 放学后茶会 @ 2020-12-02 18:30:11


|