题目描述

小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

题解;

k^2和(k+1)^2的关系。

#include <bits/stdc++.h>
using namespace std;
const int MAXN=50010;
int a[MAXN],num[MAXN],s,ans=0,anss[MAXN];
struct node{
int l,r;
int id;
}x[MAXN];
bool cmp1(node k,node z)
{
if(k.l/s==z.l/s) //此处时分块的地方,将在同一块的放在一起。
{
return k.r<z.r;
}
return k.l<z.l;
}
void add(int i)
{
int k=num[a[i]]++;//(k+1)^2-k^2=2*k+1;从k->k+1加上2*k+1;
ans+=k*2+1;
}
void del(int i)
{
int k=--num[a[i]];//此处便是减去前一个的2*k+1;
ans=ans-2*k-1;
}
int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for (int i = 1; i <=n ; ++i) {
scanf("%d",&a[i]);
}
s=(int)sqrt(n);
for (int i = 1; i <=m ; ++i) {
scanf("%d%d",&x[i].l,&x[i].r);
x[i].id=i;
}
sort(x+1,x+1+m,cmp1);
int l=1,r=0;
ans=0;
for (int i = 1; i <=m ; ++i) {
while (r<x[i].r) add(++r); //r本身已经加过了,要从下一点开始。
while (r>x[i].r) del(r--);//减这个操作要把自己本身也给减掉。
while (l>x[i].l) add(--l);
while (l<x[i].l) del(l++);
anss[x[i].id]=ans;
}
for (int i = 1; i <=m ; ++i) {
printf("%d\n",anss[i]);
}
return 0;
}

  

(洛谷)P2709 小B的询问的更多相关文章

  1. [洛谷 P2709] 小B的询问

    P2709 小B的询问 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数 ...

  2. 洛谷——P2709 小B的询问

    P2709 小B的询问 莫队算法,弄两个指针乱搞即可 这应该是基础莫队了吧 $x^2$可以拆成$((x-1)+1)^2$,也就是$(x-1)^2+1^2+2\times (x-1)$,那么如果一个数字 ...

  3. 洛谷P2709 小B的询问 莫队做法

    题干 这个是用来学莫队的例题,洛谷详解 需要注意的一点,一定要分块!不然会慢很多(直接TLE) 其中分块只在排序的时候要用,并且是给问题右端点分块 再就是注意add与del函数里的操作,增加数量不提, ...

  4. 【刷题】洛谷 P2709 小B的询问

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  5. 洛谷P2709 小B的询问

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  6. 洛谷P2709 小B的询问 莫队

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

  7. [题解]洛谷P2709 小B的询问

    地址 是一道莫队模板题. 分析 设\(\text{vis[i]}\)表示元素\(\text{i}\)出现的次数 当一个元素进入莫队时,它对答案的贡献增加.有\(\delta Ans=(X+1)^2-X ...

  8. 洛谷 P2709 小B的询问(莫队)

    题目链接:https://www.luogu.com.cn/problem/P2709 这道题是模板莫队,然后$i$在$[l,r]$区间内的个数就是$vis[ ]$数组 $add()$和$del()$ ...

  9. 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)

    莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...

  10. 洛谷2709 小B的询问(莫队)

    题面 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R] ...

随机推荐

  1. android打包代码混淆

    android应用打包代码混淆:   1.将project.propertier文件中的proguard.config=proguard-android.txt打开  拷贝指定的文件到应用中 2.更改 ...

  2. 手机APP 后端设计

      原则:   命名知其意. 一看api名字就知道这个api是干啥.   api返回数据禁止null   服务器动态处理原图(如 60x60 .80x80).  例如,客户端需要图片(http://w ...

  3. zabbix web端有数据但是没有图形

    zabbix web端有数据但是没有图形 我遇到的情况是,在配置 zabbix 网站目录时,修改了zabbix 目录的所有者和所属组,以使得 zabbix/conf/zabbix.conf.php 文 ...

  4. 特殊矩阵的压缩存储(转自chunlanse2014)

    对称矩阵 对于一个矩阵结构显然用一个二维数组来表示是非常恰当的,但在有些情况下,比如常见的一些特殊矩阵,如三角矩阵.对称矩阵.带状矩阵.稀疏矩阵等,从节约存储空间的角度考虑,这种存储是不太合适的.下面 ...

  5. php通过gbk编码判断 含有连续数字 可用于判断QQ号,手机号等。

    有可能有些输入,不希望让用户的评论或者私信中含有类似于QQ号,手机号的文本,比如交友网站.还有些恶意SEO通过,构造恶意检索词,检索词中包含QQ,手机号等,让百度爬取到,增加展现.也需要将这些检索词屏 ...

  6. hdu-2688 Rotate---树状数组+模拟

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2688 题目大意: 给你n数,(n<=3e6),有两个操作,Q为 当前有多少对数,满足严格递增, ...

  7. 模拟水题,查看二维数组是否有一列都为1(POJ2864)

    题目链接:http://poj.org/problem?id=2864 题意:参照题目 哈哈哈,这个题discuss有翻译哦.水到我不想交了. #include <cstdio> #inc ...

  8. cityscape分割3类别数据处理

    cpp: #include "cv.h" #include "highgui.h" #include <iostream> #include < ...

  9. 遍历ResultSet,行列要从1开始

    为什么遍历ResultSet,行列要从1开始. 因为Resultset的第一行的第一列都是空的,要用rs.next()到第一行才能进行读取. Statement stmt=null;  ResultS ...

  10. maven环境、本地仓储配置(下载安装)idea配置maven

    在第一步:下载maven 官网地址:http://maven.apache.org/download.cgi 下载后进行解压 解压成功 第二步:环境配置 我的电脑右键->属性->高级系统设 ...