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

    P2709 小B的询问

    题目描述

    小B有一个序列,包含N个1~K之间的整数。他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数。小B请你帮助他回答询问。

    输入输出格式

    输入格式:

    第一行,三个整数N、M、K。

    第二行,N个整数,表示小B的序列。

    接下来的M行,每行两个整数L、R。

    输出格式:

    M行,每行一个整数,其中第i行的整数表示第i个询问的答案。

    输入输出样例

    输入样例#1:
    6 4 3
    1 3 2 1 1 3
    1 4
    2 6
    3 5
    5 6
    输出样例#1:
    6
    9
    5
    2

    说明

    对于全部的数据,1<=N、M、K<=50000

    分析

    莫队,注意一下add和del函数,开始时我是先减了再加上,后来发现这种做法,什么意思呢,其实这个统计相同的数的次数在平方,与这个是等价的(带一组数试一下即可)

    代码

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cmath>
     4 using namespace std;
     5 
     6 const int MAXN = 50100;
     7 struct Que{
     8     int l,r,id,block;
     9     bool operator < (const Que &a) const 
    10     {
    11         if (block==a.block) return r < a.r;
    12         return block < a.block;
    13     }
    14 }q[MAXN];
    15 int a[MAXN],cnt[MAXN],ans[MAXN];
    16 int n,m,k,tmp,pos;
    17 void add(int x)
    18 {
    19     cnt[a[x]]++;
    20     tmp += 2*cnt[a[x]]-1;
    21 }
    22 void del(int x)
    23 {
    24     cnt[a[x]]--;
    25     tmp -= 2*cnt[a[x]]+1;
    26 }
    27 void solve()
    28 {
    29     int l = 1, r = 0;
    30     for (int i=1; i<=m; ++i)
    31     {
    32         while (l>q[i].l) l--, add(l);
    33         while (r<q[i].r) r++, add(r);
    34         while (l<q[i].l) del(l), l++;
    35         while (r>q[i].r) del(r), r--;
    36         ans[q[i].id] = tmp;
    37     }
    38 }
    39 int main()
    40 {
    41     scanf("%d%d%d",&n,&m,&k);
    42     pos = sqrt(n);
    43     for (int i=1; i<=n; ++i)
    44         scanf("%d",&a[i]);
    45     for (int i=1; i<=m; ++i)
    46     {
    47         scanf("%d%d",&q[i].l,&q[i].r);
    48         q[i].id = i;
    49         q[i].block = (q[i].l-1)/pos+1;
    50     }
    51     sort(q+1,q+m+1);
    52     solve();
    53     for (int i=1; i<=m; ++i)
    54         printf("%d
    ",ans[i]);
    55     
    56     return 0;
    57 }
  • 相关阅读:
    yii框架中获取添加数据后的id值
    linux环境安装filephp扩展
    yii框架中使用gii的用法
    lanmp环境中创建个软连接
    lanmp环境中php版本的升级为7.1
    内置函数
    递归函数
    装饰器函数精讲
    函数对象
    初识函数集锦
  • 原文地址:https://www.cnblogs.com/mjtcn/p/7147829.html
Copyright © 2011-2022 走看看