• 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
  • 相关阅读:
    apscheduler 踩坑
    fastapi 导出excel文件
    python flask 使用日志
    git 头指针游离问题
    C# 连接mysql填坑
    前端项目proxy小问题
    需完善--日志框架
    依赖<dependency>的scope了解
    git 退回到指定tag版本
    git切换远程仓库地址
  • 原文地址:https://www.cnblogs.com/For-Miku/p/12344050.html
Copyright © 2020-2023  润新知