zoukankan      html  css  js  c++  java
  • 初赛A轮

    数列互质

    时间限制:6秒

    空间限制:524288K

    给出一个长度为 n 的数列 { a[1] , a[2] , a[3] , ... , a[n] },以及 m 组询问 ( l[i] , r[i] , k[i])。
    求数列下标区间在 [ l[i] , r[i] ] 中有多少数在该区间中的出现次数与 k[i] 互质(最大公约数为1)。
    输入描述:
    第一行,两个正整数 n , m (1 ≤ n, m ≤ 50000)。
    第二行,n 个正整数 a[i] (1 ≤ a[i] ≤ n)描述这个数列。
    接下来 m 行,每行三个正整数 l[i] , r[i] , k[i] (1 ≤ l[i] ≤ r[i] ≤ n, 1 ≤ k[i] ≤ n),描述一次询问。


    输出描述:
    输出 m 行,即每次询问的答案。

    输入例子:
    10 5
    1 1 1 1 1 2 2 2 2 2
    4 7 2
    4 7 3
    4 8 2
    4 8 3
    3 8 3
    

    输出例子:
    0
    2
    1
    1
    0

    思路:A轮2题。。这题知道是莫队+数据结构,但是没学过莫队,就去学习了一发,然后最后半个小时太心急了,导致没拍完,。。我的T恤啊。。啊。。(另外写了的2题就不补了,心疼,莫队的板子套的是HZWER大佬的,谢谢大佬)

    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=50004;
    int a[N];
    set<int >s;
    set<int >::iterator it;
    int ma[N];
    struct node{
        int l,r,x,xx;
        int block;
    }e[N];
    int c[N];
    bool cmp(node p,node q){
        if(p.block==q.block) return p.r<q.r;
        return p.block<q.block;
    }
    int gcd(int a,int b)
     {
        if(b==0)
            return a;
        return gcd(b,a%b);
     }
    int main(){
        int n,m;
        scanf("%d%d",&n,&m);
        int size=sqrt(n);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        for(int i=1;i<=m;i++){
            scanf("%d%d%d",&e[i].l,&e[i].r,&e[i].x);
            e[i].xx=i;
            e[i].block=(e[i].l-1)/size+1;
        }
        sort(e+1,e+1+m,cmp);
        int l=1,r=0;
        for(int i=1;i<=m;i++){
            int sum=0;
            while(l>e[i].l){l--;s.insert(a[l]);ma[a[l]]++;}
            while(r<e[i].r){r++;s.insert(a[r]);ma[a[r]]++;}
            while(l<e[i].l){
                    ma[a[l]]--;if(ma[a[l]]==0) s.erase(a[l]);l++;}
            while(r>e[i].r) {
                    ma[a[r]]--;if(ma[a[r]]==0) s.erase(a[r]);r--;}
            for(it=s.begin();it!=s.end();it++){
                if(gcd(ma[*it],e[i].x)==1){
                    sum++;
                }
            }
            c[e[i].xx]=sum;
        }
        for(int i=1;i<=m;i++)printf("%d
    ",c[i]);
        return 0;
    }
  • 相关阅读:
    洛谷 P2590 [ZJOI2008]树的统计
    如何让文件夹隐藏起来,保护自己的隐私
    SharePoint入门——创建一个网站
    SharePoint 解决管理员密码修改后各种问题的来袭
    .NET创建一个即是可执行程序又是Windows服务的程序
    C#——WebApi 接口参数传参详解
    C#中对Web.Config、App.Config字符串加密与解密的方法
    邮件服务器常用地址和端口信息
    Unity3d 5.x搭载VS2013使用
    系统性能优化- Session丢失
  • 原文地址:https://www.cnblogs.com/hhxj/p/7047795.html
Copyright © 2011-2022 走看看