首页 > 其他分享 >牛客小白月赛81 F 小辰刚学gcd

牛客小白月赛81 F 小辰刚学gcd

时间:2023-11-19 17:45:37浏览次数:36  
标签:81 gcd 600005 int 刚学 牛客 include

LInk
首先我们可以注意到,两个数的gcd要不是它们当中较小的那一个要不是它本身。
所以对于一个特定的 \(r\),\(gcd_{i=p}^r,1<=p<=r\)来说,答案不会超过32种。
并且因为gcd的性质,答案一定是成块且递减的。
所以我们可以直接记录下对于每一个\(r\),答案都有哪些,从哪里开始出现。
并且\(r+1\)的值可以从\(r\)推出。
最后只要对于所有可能的答案进行判断就可以了。
\(O(32n)\)的时间复杂度


#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
int n,m;
int ans[600005][33];
int v[600005][33];
int a[600005];
int l,r;
map<int,int> mp; 
int gcd(int x,int y){
    return y==0?x:gcd(y,x%y);
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i){
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=n;++i){
        ans[i][0]++;
        ans[i][1]=i;
        v[i][1]=a[i];
        mp[a[i]]=i;
        for(int j=1;j<=ans[i-1][0];++j){
            int vv=gcd(a[i],v[i-1][j]);
            if(!mp.count(vv)||mp[vv]!=i){
                mp[vv]=i;
                ans[i][0]++;
                ans[i][ans[i][0]]=ans[i-1][j];
                v[i][ans[i][0]]=vv;
            }
        }
    }
    while(m--){
        scanf("%d%d",&l,&r);
        int cnt=1;
        int cntt=0;
        while(cnt<=ans[r][0]){
            if(l<=ans[r][cnt]){
            cntt++;
            }
            cnt++;
        }
        printf("%d\n",cntt);
    }
    return 0;
}

标签:81,gcd,600005,int,刚学,牛客,include
From: https://www.cnblogs.com/For-Miku/p/17842308.html

相关文章

  • 25届实习秋招-Java面试-MySQL数据库面试题整理-牛客网近一年
    MySQL概述:关系型数据和非关系型数据库的区别,有哪些应用场景有哪些非关系的单表操作:三种SQL语言类型,MySql本身常用命令DDL-数据定义语句:表的常用操作truncate/delete--drop操作的区别varchar最大字节数DMLUpdate语句的sql执行流程对行数据的修改是......
  • 牛客小白月赛81
    牛客小白月赛81A.小辰打比赛#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,x,y,sum;cin>>n>>x;sum=0;for(inti=1;i<=n;++i){cin>>y;if(y<x)sum+=y......
  • 牛客网语法直播笔记-前30分钟-无图
    学习网址:https://www.nowcoder.com/study/live/528/1/1第一个问题:数组下标越界数组下标越界没有规定说声明的数组要挨着放,也就是图中的abc三个数组是没有规定地址是连在一起的,一般来说编译器是会这么干的,而且每个编译器的都会在之间留点空(也就是0)每个编译器所留的空还不一样。这里......
  • 牛客题霸 BM1 反转链表
    BM1 反转链表  简单  通过率:38.76%  时间限制:1秒  空间限制:256M知识点链表描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 0\leqn\leq10000≤n≤1000要求:空间复杂度......
  • 牛客-sql编程-错误
    问题:程序异常退出,请检查代码"是否有数组越界等异常"或者"是否有语法错误"SQL_ERROR_INFO:"YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'--合并表\nselect*\nfrom(\nselec......
  • 牛客sql刷题
    一、非技术快速入门https://www.nowcoder.com/exam/oj?page=1&tab=SQL篇&topicId=199题目记录:SQL34统计复旦用户8月练题情况题目结果代码:selectup.device_id,'复旦大学'asuniversity,count(question_id)asquestion_cnt,#计算做对的题目的个......
  • 牛客[编程题] HJ63 DNA序列
    HJ63DNA序列中等  通过率:39.36%  时间限制:1秒  空间限制:32M 描述一个DNA序列由A/C/G/T四个字母的排列组合组成。G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个比例非常重要......
  • 牛客[编程题] HJ66 配置文件恢复
    HJ66 配置文件恢复 中等  通过率:36.66%  时间限制:1秒  空间限制:32M  描述有6条配置命令,它们执行的结果分别是:命   令执   行resetreset whatreset boardboard faultboard addwhere to addboard deleteno board at......
  • 牛客[编程题] HJ64 MP3光标位置
    HJ64MP3光标位置中等  通过率:24.47%  时间限制:1秒  空间限制:32M 描述MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第1首歌。 现在要实现通......
  • 牛客[编程题] HJ59 找出字符串中第一个只出现一次的字符
    HJ59找出字符串中第一个只出现一次的字符中等  通过率:32.27%  时间限制:1秒  空间限制:32M 描述找出字符串中第一个只出现一次的字符  数据范围:输入的字符串长度满足 1\len\le1000\1≤n≤1000  输入描述:输入一个非空字符串输出描述:输出......