zoukankan      html  css  js  c++  java
  • P1890 gcd区间

    链接:Miku

    ----------------------

    一道非常水的静态区间查询的问题。

    ----------------------

    为什么说他水呢,在洛谷上的数据实在太弱,直接n^2暴力预处理都行

    ----------------------

    然而我是不会那么干的,我选择了st表

    在这道题中,只要加上一个gcd函数,然后把转移的和询问的方式改成两个区间gcd的方式就可以了

    -------------------

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int st[100005][30];
    int n,m;
    int x,y;
    int gcd(int x,int y){
        if(y==0)
        return x;
        return gcd(y,x%y);
    }
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;++i)
            scanf("%d",&st[i][0]);
        for(int i=1;i<=22;++i){
            for(int j=1;j+(1<<i)-1<=n;++j){
                st[j][i]=gcd(st[j][i-1],st[j+(1<<(i-1))][i-1]);
            }
        }
        for(int i=1;i<=m;++i){
            scanf("%d%d",&x,&y);
            int k=log2(y-x+1);
            cout<<gcd(st[x][k],st[y-(1<<k)+1][k])<<endl;
        }
        return 0;
    }
    Ac
  • 相关阅读:
    作业16
    递归函数
    三元表达式与生成式
    迭代器与生成器
    作业15
    装饰器
    作业14
    string的入门与进阶
    修理牧场(优先队列)
    旅游规划
  • 原文地址:https://www.cnblogs.com/For-Miku/p/12344050.html
Copyright © 2011-2022 走看看