zoukankan      html  css  js  c++  java
  • P2709 小B的询问-莫队

    • 思路 :依旧是 分块 块内按照 r 排序 不同块按照 L排序,处理好增加 删除对结果的影响即可。
    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 56789
    int n,m,l,r,B,sum,len,k,col[maxn],cnt[maxn],ans[maxn];
    struct node
    {
        int l,r,id;
        bool operator <(const node &b)const
        {
            return b.l/B==l/B?r<b.r:l<b.l;
        }
    } a[maxn];
    void add(int x)
    {
        if(x<1||x>k)return;
        cnt[x]++;
        sum+=(cnt[x]*cnt[x])-((cnt[x]-1)*(cnt[x]-1));
    }
    void del(int x)
    {
        if(x<1||x>k)return;
        cnt[x]--;
        sum-=((cnt[x]+1)*(cnt[x]+1))-((cnt[x])*(cnt[x]));
    }
    int main()
    {
        r=sum=len=0;
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1; i<=n; i++)
            scanf("%d",&col[i]);
        for(int i=0; i<m; i++)
        {
            scanf("%d%d",&a[i].l,&a[i].r);
            a[i].id=i;
        }
        B=n/sqrt(m);
        sort(a,a+m);
        l=1;
        for(int i=0; i<m; i++)
        {
            while(l<a[i].l)
                del(col[l++]);
            while(r<a[i].r)
                add(col[++r]);
            while(l>a[i].l)
                add(col[--l]);
            while(r>a[i].r)
                del(col[r--]);
            ans[a[i].id]=sum;
        }
        for(int i=0; i<m; i++)
            printf("%d
    ",ans[i]);
        return 0;
    }
    

      

  • 相关阅读:
    2.airflow参数简介
    KETTLE元数据表
    KETTLE监控
    KETTLE设置变量
    KETTLE集群搭建
    KETTLE并行
    Android TextView setText内嵌html标签
    Android Fragment实现分屏
    Java基础之String,StringBuilder,StringBuffer
    踩过的坑之-----selector
  • 原文地址:https://www.cnblogs.com/SDUTNING/p/10245287.html
Copyright © 2011-2022 走看看