题目描述

小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. ArcGIS Engine中的Symbols详解(转)

    本文来源:http://blog.csdn.net/mengdong_zy/article/details/8980842 原文如下: Symbols Symbol level drawing Joi ...

  2. 如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题

    自10.2版本开始,我就一直被ArcGIS Runtime SDK for Android的中文标注无限困扰.无论是驻留于内存中的Graphic 的文本符号TextSymbol,还是新增的离线geod ...

  3. sharepoint 2010 FieldLookup 的更新方法

    网上有,但是是错误的,稍微改一下,就可以了 第一个方法是要更新的item,其中 _fieldname 为要更新的lookup字段名字,_lookupValue为要更新的值. public void S ...

  4. HTML:::before和::after伪元素的用法

    随笔 - 366  文章 - 0  评论 - 392 ::before和::after伪元素的用法   一.介绍 css3为了区分伪类和伪元素,伪元素采用双冒号写法. 常见伪类——:hover,:li ...

  5. Anaconda上安装Tensorflow并在jupyter上运行

    博客原文地址:https://blog.csdn.net/index20001/article/details/73555182 https://www.cnblogs.com/HongjianChe ...

  6. mysql全部基本数据类型

    MySQL基本数据类型统计http://www.cnblogs.com/xuqiang/archive/2010/10/14/1953464.html 详细介绍http://www.cnblogs.c ...

  7. MySQL 开机自启动

    MySQL 开机自启动 chkconfig add mysqld 或者 echo "/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc ...

  8. Flashing Fluorescents(状压DP)

    Flashing Fluorescents 时间限制: 1 Sec  内存限制: 128 MB提交: 56  解决: 19[提交] [状态] [讨论版] [命题人:admin] 题目描述 You ha ...

  9. Spring boot 项目导出可执行jar

    配置文件中添加插件 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>s ...

  10. 图像上采样(图像插值)增取样(Upsampling)或内插(Interpolating)下采样(降采样),

    缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:1.使得图像符合显示区域的大小:2.生成对应图像的缩略图.放大图像(或称为上采样(upsamplin ...