题目描述

小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

题解:莫队模板吧,稍加修改

#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int N=50005;
inline int get(){int f=1;char c=getchar();int res=0;while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9'){res=(res<<3)+(res<<1)+c-'0';c=getchar();}return res*f;
}
struct node{int l,r,id;
}e[N];
int a[N],n,m,jjj[N],f[N],ans,k,kk;bool cmp(node p,node q){if((p.l-1)/kk==(q.l-1)/kk) return p.r<q.r;else return (p.l-1)/kk<(q.l-1)/kk;
}void add(int x){if(++f[x]==1) ans+=2*f[x]-1;
}
void remove(int x){if(--f[x]==0) ans-=2*f[x]-1;
}
int main(){freopen("02709.in","r",stdin);freopen("02709.out","w",stdout);n=get(); m=get(); k=get();kk=sqrt(n);for(int i=1;i<=n;i++)a[i]=get();for(int i=1;i<=m;i++){e[i].l=get();e[i].r=get();e[i].id=i;}sort(e+1,e+m+1,cmp);int L=1,R=0;for(int i=1;i<=m;i++){//while(L>e[i].l) add(a[--L]);//while(R<e[i].r) add(a[++R]);//while(L<e[i].l) remove(a[L++]);//while(R>e[i].r) remove(a[R--]);while(L>e[i].l) L--,f[a[L]]++,ans+=2*f[a[L]]-1;while(R<e[i].r) R++,f[a[R]]++,ans+=2*f[a[R]]-1;while(L<e[i].l) f[a[L]]--,ans-=2*f[a[L]]+1,L++;while(R>e[i].r) f[a[R]]--,ans-=2*f[a[R]]+1,R--;jjj[e[i].id]=ans;}for(int i=1;i<=m;i++)printf("%d\n",jjj[i]);return 0;
} 

转载于:https://www.cnblogs.com/wuhu-JJJ/p/11235072.html

【洛谷 2709】小B的询问相关推荐

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

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

  2. 洛谷P2709 小B的询问

    莫队模版 本来想能不学莫队就不学,但是这次比赛被莫队卡得好惨,于是学了一发.. 先切道模板题.. 最普通的莫队就是把序列分块,然后按照询问所在的块来排序,减少指针的移动次数.. #include &l ...

  3. 洛谷 P2186 小Z的栈函数

    洛谷 P2186 小Z的栈函数 题目 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: NUM X:栈顶放入X. POP:抛弃栈顶元素. I ...

  4. 洛谷 P4430 小猴打架

    洛谷 P4430 小猴打架 题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打 ...

  5. 2017提高组D1T1 洛谷P3951 小凯的疑惑

    洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...

  6. (最小割)洛谷P1361 小M的作物

    洛谷P1361 小M的作物 思路: 这是一个两者取一的模型,将点集一分为二. 最小割在数值上等同于最大流.割去权值和最小的边,使图分成两部分,割下来的边权值和为最小割. 对于此题,先不考虑种在一起的情 ...

  7. 【01背包求方案数模板】洛谷 P1164 小A点菜

    洛谷 P1164 小A点菜 https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆, ...

  8. 洛谷[P1120 小木棍]

    洛谷[P1120 小木棍] 题目: 思路: 枚举小木棒可能的长度,从数组最大值开始枚举,这个值能被总长度整除才是可行的 在使用dfs枚举小木棒的每一种可能,如果不可能就找下一个可能的长度开始枚举 注意 ...

  9. 网络流建图方法(二)——辅助点(虚点)决策法洛谷 P1361 小M 的作物 Dinic

    inic声明:本博客默认读者会最大流最小割的定理,会Dinic, 最小割在数值上 == 最大流 但是在意义上没有任何关系,姑且可以这样求得最小割,当然可以自行百度最小割的证明定理 还是从题目开始说起 ...

  10. 洛谷-P1125-笨小猴

    [NOIP2008 提高组] 笨小猴 - 洛谷 解题思路: 1.由题可得,输入一个只包含字母的字符串,那么用string str 来表示,判断里面字母出现最多的次数和最少的次数,max和min 2.如 ...

最新文章

  1. leetcode1. 两数之和--每天刷一道leetcode系列!
  2. mysql default unix_timestamp_mysql中的unix_timestamp函数
  3. linux之man命令用法入门
  4. 第4阶段——制作根文件系统之分析init_post()如何启动第1个程序(1)
  5. oracle 游标内存自动释放,详解Oracle隐式游标和显式游标
  6. java hrows使用的解释_Android JNI学习之javah命令的正确使用(找了好半天才找到的,汉,网上好多说法都没用)...
  7. Markdown引用图片,且不使用网上链接的解决方法
  8. Java中提取字符串中的数字
  9. mongodb有关的研究
  10. Android中关于Volley的使用(四)利用NetworkImageView来加载图片
  11. matlab中牛顿迭代程序,牛顿迭代法的MATLAB程序
  12. delphi7IDE技巧
  13. 2022迅雷ios版下载beta
  14. PHP后台数据处理及与web端进行数据交互
  15. java未来三年的工作计划_个人未来三年工作计划
  16. JVAV SE学习总结(01)
  17. 理解JavaScriptES6中的TDZ(暂时性死区)
  18. Docker概述与基本使用
  19. 超融合和服务器关系_一文读懂超融合服务器
  20. 发生交通事故当时没报警过后可否报警呢

热门文章

  1. ionice使用说明与参数详析
  2. 国家电网公司“SG186”工程总部企业门户开发实施
  3. telnet与ssh的配置
  4. 复习宝典之Maven项目管理
  5. 验证码画布生成以及点击图片切换验证码
  6. web api 二
  7. [React Router v4] Conditionally Render a Route with the Switch Component
  8. 用CSS设置Table的细边框的最好用的方法
  9. 8款效果精美的 jQuery 加载动画和进度条插件
  10. 我在大学毕业后学习Linux、python的一些经验