BZOJ3781:小B的询问(莫队)
Description
Input
Output
Sample Input
1 3 2 1 1 3
1 4
2 6
3 5
5 6
Sample Output
9
5
2
HINT
对于全部的数据,1<=N、M、K<=50000
Solution
莫队水题
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define N (50000+100)
using namespace std;
struct node
{
int l,r,id,ans,ord;
}Ask[N];
int a[N],n,m,k,cnt[N],Sigma,l=,r=;
bool cmp1 (node a,node b){return a.id==b.id?a.r<b.r:a.id<b.id;}
bool cmp2 (node a,node b){return a.ord<b.ord;} void Ins(int x)
{
Sigma-=cnt[x]*cnt[x];
cnt[x]++;
Sigma+=cnt[x]*cnt[x];
}
void Del(int x)
{
Sigma-=cnt[x]*cnt[x];
cnt[x]--;
Sigma+=cnt[x]*cnt[x];
}
void MoQueue(int x)
{
int L=Ask[x].l,R=Ask[x].r;
while (l<L) Del(a[l++]);
while (l>L) Ins(a[--l]);
while (r<R) Ins(a[++r]);
while (r>R) Del(a[r--]);
Ask[x].ans=Sigma;
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
int len=pow(n,2.0/3.0);
for (int i=;i<=n;++i)
scanf("%d",&a[i]);
for (int i=;i<=m;++i)
{
scanf("%d%d",&Ask[i].l,&Ask[i].r);
Ask[i].id=Ask[i].l/len;
Ask[i].ord=i;
}
sort(Ask+,Ask+m+,cmp1);
for (int i=;i<=m;++i)
MoQueue(i);
sort(Ask+,Ask+m+,cmp2);
for (int i=;i<=m;++i)
printf("%d\n",Ask[i].ans);
}
BZOJ3781:小B的询问(莫队)的更多相关文章
- 【bzoj3781】小B的询问 莫队算法
原文地址:http://www.cnblogs.com/GXZlegend/p/6803821.html 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L ...
- 小B的询问 莫队分块
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- luogu 2709 小B的询问 莫队
题目链接 Description 小B有一个序列,包含\(N\)个\(1-K\)之间的整数.他一共有\(M\)个询问,每个询问给定一个区间\([L..R]\),求\(\sum_{i=1}^{K}c_i ...
- luoguP2709 小B的询问 [莫队]
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- 洛谷P2709 小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]中的重 ...
- luogu 2709小b的询问--莫队
https://www.luogu.org/problemnew/show/P2709 无修改的莫队几乎没有什么太高深的套路,比较模板吧,大多都是在那两个函数上动手脚. 这题询问每一种数字数量的平方和 ...
- Bzoj 3781: 小B的询问 莫队,分块,暴力
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 426 Solved: 284[Submit][Status][Discuss ...
- 洛谷.2709.小B的询问(莫队)
题目链接 /* 数列的最大值保证<=50000(k),可以直接用莫队.否则要离散化 */ #include<cmath> #include<cstdio> #includ ...
随机推荐
- ayer.prompt 怎样让输入值为空也可以向下执行
http://fly.layui.com/jie/4227/ layer.prompt({title: '输入任何口令,并确认',formType: 1, //prompt风格,支持0-2value: ...
- 小程序插入html代码
转自:https://blog.csdn.net/BetterGG/article/details/81027291 一.首先,html 分 2 种情况: 1.我在做详情页开发的时候发现获取到的数据是 ...
- 十二、异步工具Timer
一.简介 JDK提供一种异步线程工具Timer类,你可以利用这个类做延迟任务.周期性任务等. JDK文档:http://tool.oschina.net/uploads/apidocs/jdk-zh/ ...
- 初级Linux学习指南
1 学习书籍 1.1 入门书籍 <Linux系统命令及Shell脚本实践指南> 学习建议:该书所有章节详读一遍,同时结合实际操作,学习方法因人而异,作者本人学习该书时,每天上班前和下班后学 ...
- oracle 多列数据相同,部分列数据不同合并不相同列数据
出现这样一种情况: 前面列数据一致,最后remark数据不同,将remark合并成 解决办法: 最后一列:结果详情: 使用到的语句为: select a,b,c,wm_concat(d) d,wm_c ...
- 【SSH网上商城项目实战02】基本增删查改、Service和Action的抽取以及使用注解替换xml
转自:https://blog.csdn.net/eson_15/article/details/51297698 上一节我们搭建好了Struts2.Hibernate和Spring的开发环境,并成功 ...
- redis使用及配置之缓存详解
redis使用及配置之缓存详解 1.Redis的介绍 Redis是一个Key-Value存储系统.它支持存储的value类型有:string(字符串),list(链表), set(无序集合),zset ...
- eclipse 查看源码 source not found
是因为eclipse里面没有设置好源码路径. 源码路径在jdk安装包里面 C:/Program Files/Java/jdk1.8.0_191/src.zip 这个src.zip文件, 设置ecli ...
- JDBC入门(2)--- ResultSet之滚动结果集
一.ResultSet之滚动结果集 ResultSet表示结果集,它是一个二维的表格.ResultSet内部维护一个行光标(游标),ResultSet提供了一系列的方法来移动游标: void befo ...
- sql语句中as的意思是什么?
as 一般用在两个地方,一个是query的时候,用来重新指定返回的column(列) 名字如:一个table 有个column叫 id, 我们的query是select id from table1. ...