zoukankan      html  css  js  c++  java
  • BZOJ 2506 分块

    //By SiriusRen
    #include <bits/stdc++.h>
    using namespace std;
    const int N=100005;
    int a[N],n,m,f[105][105],g[N],tmp=1;
    struct Node{int l,r,p,k,ans,id;}ask[N];
    bool cmp(Node a,Node b){return a.l<b.l;}
    bool cmp2(Node a,Node b){return a.id<b.id;}
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        for(int i=1;i<=m;i++)
            scanf("%d%d%d%d",&ask[i].l,&ask[i].r,&ask[i].p,&ask[i].k),ask[i].id=i,ask[i].r++;
        sort(ask+1,ask+1+m,cmp);
        for(int i=1;i<=m;i++){
            while(tmp<ask[i].l){
                for(int i=1;i<=100;i++)f[i][a[tmp]%i]++;
                g[a[tmp]]++;
                tmp++;
            }
            if(ask[i].p<=100)ask[i].ans-=f[ask[i].p][ask[i].k];
            else{
                for(int i=0;i*ask[i].p+ask[i].k<=10000;i++)ask[i].ans-=g[i*ask[i].p+ask[i].k];
            }
        }tmp=1;
        memset(f,0,sizeof(f)),memset(g,0,sizeof(g));
        for(int i=1;i<=m;i++){
            while(tmp<ask[i].r){
                for(int i=1;i<=100;i++)f[i][a[tmp]%i]++;
                g[a[tmp]]++;
                tmp++;
            }
            if(ask[i].p<=100)ask[i].ans+=f[ask[i].p][ask[i].k];
            else{
                for(int i=0;i*ask[i].p+ask[i].k<=10000;i++)ask[i].ans+=g[i*ask[i].p+ask[i].k];
            }
        }
        sort(ask+1,ask+1+m,cmp2);
        for(int i=1;i<=m;i++)printf("%d
    ",ask[i].ans);
    }
  • 相关阅读:
    《JavaScript语言精粹》小记
    JavaScript之单例实战
    浅谈requireJS
    细说gulp
    Javascript之自定义事件
    ClipboardJS复制粘贴插件的使用
    重新学习vue基础
    正则简单说明
    JavaScript字符串api简单说明
    移动端浏览器问题
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/9329003.html
Copyright © 2011-2022 走看看