zoukankan      html  css  js  c++  java
  • cf220B莫队

    用莫队比直接做快了很多。。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    #include<algorithm>
    #define maxn 100005
    int a[maxn],b[maxn],c[maxn],num[maxn];//原始数组,排序后的数组,离散后的数组,离散后的数组中元素出现的次数
    int s;//块长度
    struct Query{
        int l,r,id;
        bool operator<(const Query &a)const{
            if(l/s==a.l/s) return r<a.r;
            return l/s<a.l/s; 
        }
    }q[maxn];
    int ans[maxn];
    int main(){
        int n,m;
        while(scanf("%d%d",&n,&m)==2){
            s=(int)sqrt(1.0*n);
            for(int i=1;i<=n;i++)
                scanf("%d",&a[i]),b[i]=a[i];
            sort(b+1,b+n+1);
            for(int i=1;i<=n;i++)
                c[i]=lower_bound(b+1,b+1+n,a[i])-b;
            for(int i=1;i<=m;i++)
                scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i;
            sort(q+1,q+m+1);
            //处理每个询问
            int l=1,r=0,tmp=0;
            for(int i=1;i<=m;i++){
                while(r<q[i].r){//右边界拓展
                    r++;
                    if(num[c[r]]==a[r]-1) tmp++;
                    else if(num[c[r]]==a[r]) tmp--;
                    num[c[r]]++; 
                }
                while(r>q[i].r){//右边界往回缩
                    if(num[c[r]]==a[r]) tmp--;
                    else if(num[c[r]]==a[r]+1) tmp++;
                    num[c[r]]--;
                    r--;
                }
                while(l<q[i].l){//左边界往回缩
                    if(num[c[l]]==a[l]) tmp--;
                    else if(num[c[l]]==a[l]+1) tmp++;
                    num[c[l]]--;
                    l++; 
                }
                while(l>q[i].l){//左边界拓展
                    l--;
                    if(num[c[l]]==a[l]-1) tmp++;
                    else if(num[c[l]]==a[l]) tmp--;
                      num[c[l]]++;
                }
                ans[q[i].id]=tmp;
            }
            for(int i=1;i<=m;i++)
                printf("%d
    ",ans[i]);
        }
        return 0;
    }
  • 相关阅读:
    win7 删除Windows服务的方法
    如何对SQL Server 2005进行设置以允许远程连接(转载)
    MySql实现远程连接
    OpenCV训练分类器制作xml文档
    Ms SQL Server 约束和规则
    PowerDesigner实用技巧小结(4)
    企业级技术解决方案:hbase+es
    ES的聚合操作
    es之过滤器
    es之得分(加权)
  • 原文地址:https://www.cnblogs.com/zsben991126/p/9919373.html
Copyright © 2011-2022 走看看