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<=N、M、K<=50000
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std; const int N=; int n,m,k;
int a[N],c[N];
int ans,Ans[N];
int belong[N];
struct Querry
{
int tim,l,r;
bool operator < (const Querry &a) const
{
if(belong[l]==belong[a.l]) return belong[r]<belong[a.r];
return belong[l]<belong[a.l];
}
}q[N]; int read()
{
char c=getchar();int num=;
for(;!isdigit(c);c=getchar());
for(;isdigit(c);c=getchar())
num=num*+c-'';
return num;
} void init()
{
n=read(),m=read(),k=read();
int size=sqrt(n);
for(int i=;i<=n;++i)
a[i]=read(),
belong[i]=(i-)/size+;
for(int i=;i<=m;++i)
q[i].l=read(),q[i].r=read(),q[i].tim=i;
sort(q+,q+m+); } /*void update(int now,bool type)
{
if(type)
{
ans-=c[now]*c[now];
++c[now];
ans+=c[now]*c[now];
}
else
{
ans-=c[now]*c[now];
--c[now];
ans+=c[now]*c[now];
}
}*/
void update(int now,bool type)
{
if(type)
ans+=c[now]<<|,++c[now]; //(a+1)*(a+1)==a*a+2*a+1,比a*a多了2*a+1
else
ans-=(c[now]<<)-,--c[now]; //(a-1)*(a-1)==a*a-2*a+1,比a*a少了2*a-1
} void work()
{
for(int i=q[].l;i<=q[].r;++i)
update(a[i],);
Ans[q[].tim]=ans;
for(int i=;i<=m;++i)
{
if(q[i].l>q[i-].l)
for(int j=q[i-].l;j<q[i].l;++j)
update(a[j],);
if(q[i].l<q[i-].l)
for(int j=q[i].l;j<q[i-].l;++j)
update(a[j],);
if(q[i].r<q[i-].r)
for(int j=q[i].r+;j<=q[i-].r;++j)
update(a[j],);
if(q[i].r>q[i-].r)
for(int j=q[i-].r+;j<=q[i].r;++j)
update(a[j],);
Ans[q[i].tim]=ans;
}
for(int i=;i<=m;++i)
printf("%d\n",Ans[i]);
} int main()
{
init();
work();
return ;
}
P2709 小B的询问 (莫队板子)的更多相关文章
- 洛谷P2709 小B的询问 莫队
小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数.小 ...
- 洛谷P2709 小B的询问 莫队做法
题干 这个是用来学莫队的例题,洛谷详解 需要注意的一点,一定要分块!不然会慢很多(直接TLE) 其中分块只在排序的时候要用,并且是给问题右端点分块 再就是注意add与del函数里的操作,增加数量不提, ...
- P2709 小B的询问-莫队
思路 :依旧是 分块 块内按照 r 排序 不同块按照 L排序,处理好增加 删除对结果的影响即可. #include<bits/stdc++.h> using namespace std; ...
- BZOJ3781:小B的询问(莫队)
Description 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L ...
- 小B的询问 莫队分块
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- 【bzoj3781】小B的询问 莫队算法
原文地址:http://www.cnblogs.com/GXZlegend/p/6803821.html 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L ...
- luogu 2709 小B的询问 莫队
题目链接 Description 小B有一个序列,包含\(N\)个\(1-K\)之间的整数.他一共有\(M\)个询问,每个询问给定一个区间\([L..R]\),求\(\sum_{i=1}^{K}c_i ...
- luogu 2709小b的询问--莫队
https://www.luogu.org/problemnew/show/P2709 无修改的莫队几乎没有什么太高深的套路,比较模板吧,大多都是在那两个函数上动手脚. 这题询问每一种数字数量的平方和 ...
- luoguP2709 小B的询问 [莫队]
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- 【luogu1709】小B的询问 - 莫队
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
随机推荐
- 【转载】终于有人把“TCC分布式事务”的实现原理讲明白了
之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下.很多朋友看了还是不知道分布式事务到底怎么回事,在项目里到底如何使用. 所以这篇文章,就用大白话+手工绘图,并结合一 ...
- CCF 2016-04-2 俄罗斯方块
CCF 2016-04-2 俄罗斯方块 题目 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏. 游戏在一个15行10列的方格图上进行,方格图上的每一个格子可能已经放置了方块,或者 ...
- c# $和@ 简化字符串格式化拼接
int age=18; Console.WriteLine($"XiaoMing is \"{age}\" {{ years}} old"); Console. ...
- Linux下Java变量
一.JAVA_HOME.PATH.CLASSPATH详解 1.1.JAVA_HOME 指向jdk安装目录,该目录下有bin.lib目录.Eclipse/NetBeans/Tomcat等软件就是通过搜索 ...
- spring boot 使用GraphQL
在此之前需要简单了解GraphQL的基本知识,可通过以下来源进行学习 GraphQL官方中文网站 :https://graphql.cn GraphQL-java 官网:https://www.gra ...
- DDL 操作表结构
DDL 操作表结构:CRUD 一.C(create)创建 1.创建表 create table 表名( 列名1 数据类型1, 列名2 数据类型2, 列名3 数据类型3, ... 列名n 数据类型n ) ...
- JavaWeb开发回顾总结【不断更新中】
1.Java语言编程 2.Servlet & JSP(JavaServer Pages) JSPGet方法中文乱码,以上是我的一篇解决Get方法的文章. 关于编码的约定,从项目的一开始就要规定 ...
- oracle in和exists区别
in和exists http://oraclemine.com/sql-exists-vs-in/ https://www.techonthenet.com/oracle/exists.php htt ...
- OSI7层模型和网络排错、网络安全
1.OSI7层模型和网络排错 7层模型和网络排错 序号 层 网络排错举例 措施 1 物理层故障 查看链接状态发送和接收数据包 2 数据链路层故障 MAC冲突ADSL欠费网速没法协商一致计算机连接到错误 ...
- WebStorm 2019激活方法
1.先下载安装JetBrains WebStorm 2019,安装完成先不要运行2.接下来对软件进行注册破解,首先以记事本的方式打开hosts文件,将代码添加至hosts文件屏蔽软件联网:hosts文 ...