码迷,mamicode.com
首页 > 其他好文 > 详细

初赛A轮

时间:2017-06-19 13:11:02      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:==   const   公约数   style   node   sort   size   include   main   

数列互质

时间限制: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\n",c[i]);
    return 0;
}

 

初赛A轮

标签:==   const   公约数   style   node   sort   size   include   main   

原文地址:http://www.cnblogs.com/hhxj/p/7047795.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!