【洛谷 2709】小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个询问的答案。
输入输出样例
6 4 3 1 3 2 1 1 3 1 4 2 6 3 5 5 6
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的询问相关推荐
- 【刷题】洛谷 P2709 小B的询问
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- 洛谷P2709 小B的询问
莫队模版 本来想能不学莫队就不学,但是这次比赛被莫队卡得好惨,于是学了一发.. 先切道模板题.. 最普通的莫队就是把序列分块,然后按照询问所在的块来排序,减少指针的移动次数.. #include &l ...
- 洛谷 P2186 小Z的栈函数
洛谷 P2186 小Z的栈函数 题目 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: NUM X:栈顶放入X. POP:抛弃栈顶元素. I ...
- 洛谷 P4430 小猴打架
洛谷 P4430 小猴打架 题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打 ...
- 2017提高组D1T1 洛谷P3951 小凯的疑惑
洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...
- (最小割)洛谷P1361 小M的作物
洛谷P1361 小M的作物 思路: 这是一个两者取一的模型,将点集一分为二. 最小割在数值上等同于最大流.割去权值和最小的边,使图分成两部分,割下来的边权值和为最小割. 对于此题,先不考虑种在一起的情 ...
- 【01背包求方案数模板】洛谷 P1164 小A点菜
洛谷 P1164 小A点菜 https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆, ...
- 洛谷[P1120 小木棍]
洛谷[P1120 小木棍] 题目: 思路: 枚举小木棒可能的长度,从数组最大值开始枚举,这个值能被总长度整除才是可行的 在使用dfs枚举小木棒的每一种可能,如果不可能就找下一个可能的长度开始枚举 注意 ...
- 网络流建图方法(二)——辅助点(虚点)决策法洛谷 P1361 小M 的作物 Dinic
inic声明:本博客默认读者会最大流最小割的定理,会Dinic, 最小割在数值上 == 最大流 但是在意义上没有任何关系,姑且可以这样求得最小割,当然可以自行百度最小割的证明定理 还是从题目开始说起 ...
- 洛谷-P1125-笨小猴
[NOIP2008 提高组] 笨小猴 - 洛谷 解题思路: 1.由题可得,输入一个只包含字母的字符串,那么用string str 来表示,判断里面字母出现最多的次数和最少的次数,max和min 2.如 ...
最新文章
- leetcode1. 两数之和--每天刷一道leetcode系列!
- mysql default unix_timestamp_mysql中的unix_timestamp函数
- linux之man命令用法入门
- 第4阶段——制作根文件系统之分析init_post()如何启动第1个程序(1)
- oracle 游标内存自动释放,详解Oracle隐式游标和显式游标
- java hrows使用的解释_Android JNI学习之javah命令的正确使用(找了好半天才找到的,汉,网上好多说法都没用)...
- Markdown引用图片,且不使用网上链接的解决方法
- Java中提取字符串中的数字
- mongodb有关的研究
- Android中关于Volley的使用(四)利用NetworkImageView来加载图片
- matlab中牛顿迭代程序,牛顿迭代法的MATLAB程序
- delphi7IDE技巧
- 2022迅雷ios版下载beta
- PHP后台数据处理及与web端进行数据交互
- java未来三年的工作计划_个人未来三年工作计划
- JVAV SE学习总结(01)
- 理解JavaScriptES6中的TDZ(暂时性死区)
- Docker概述与基本使用
- 超融合和服务器关系_一文读懂超融合服务器
- 发生交通事故当时没报警过后可否报警呢