• [bzoj5016][Snoi2017]一个简单的询问


    来自FallDream的博客,未经允许,请勿转载,谢谢。


    给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出
     
    get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次。
    n,q<=50000
    Ans(l1,r1,l2,r2)=Ans(1,r1,1,r2)-Ans(1,l1-1,1,r2)-Ans(1,r1,1,l2-1)+Ans(1,l1-1,1,l2-1)
    然后就可以莫队了
    #include<algorithm>
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #define MN 50000
    using namespace std;
    inline int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    struct ques{int l,r,id,ad;}q[MN*4+5];
    int n,block[MN+5],size,a[MN+5],num1[MN+5],num2[MN+5],m,tot=0,L=0,R=0;
    long long res=0,Ans[MN+5];
    bool cmp(const ques&a,const ques&b){return block[a.l]==block[b.l]?a.r<b.r:a.l<b.l;}
    int main()
    {
        n=read();size=sqrt(n);
        for(int i=1;i<=n;++i) block[i]=(i-1)/size+1;
        for(int i=1;i<=n;++i) a[i]=read();
        m=read();
        for(int i=1;i<=m;++i)
        {
            int l1=read(),r1=read(),l2=read(),r2=read();
            q[++tot]=(ques){r1,r2,i,1};
            q[++tot]=(ques){r1,l2-1,i,-1};
            q[++tot]=(ques){l1-1,r2,i,-1};
            q[++tot]=(ques){l1-1,l2-1,i,1};
        }
        sort(q+1,q+tot+1,cmp);
        for(int i=1;i<=tot;++i)
        {
            while(L<q[i].l) ++L,res+=num2[a[L]],++num1[a[L]];
            while(L>q[i].l) res-=num2[a[L]],--num1[a[L]],--L;
            while(R<q[i].r) ++R,res+=num1[a[R]],++num2[a[R]];
            while(R>q[i].r) res-=num1[a[R]],--num2[a[R]],--R;
            Ans[q[i].id]+=q[i].ad*res;
        }
        for(int i=1;i<=m;++i) printf("%lld
    ",Ans[i]);
        return 0;
    }
    
  • 相关阅读:
    html基础知识整理
    全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment
    python简易版学生管理系统
    L2-024. 部落(并查集)
    python 飞机大战 实例
    Python3没有dict.has_key方法
    python学习-字符串 列表 元祖
    vim产生的.swap文件
    caffe 参数介绍 solver.prototxt
    ReentrantLock 实现原理
  • 原文地址:https://www.cnblogs.com/FallDream/p/bzoj5016.html
Copyright © 2020-2023  润新知