题解 小B的询问
题面
解析
这就是道莫队模板啊啊!!
因此,似乎并没有什么好讲的。
莫队算法传送门
我们只需要将询问存下来,
离线处理就行了。
还是上代码吧:
#include<bits/stdc++.h>
using namespace std; inline int read(){
int sum=,f=;char ch=getchar();
while(ch>'' || ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){sum=sum*+ch-'';ch=getchar();}
return f*sum;
} struct node{
int l,r,ans,id;
}q[];
int n,m,k,l,r,gap,ans=;
int a[]/*颜色*/,c[]/*颜色的重复次数*/; bool cmp1(node a,node b){
return (a.r/gap==b.r/gap)? a.l<b.l : a.r<b.r;
} bool cmp2(node a,node b){
return a.id<b.id;
} inline void add(int x){
c[a[x]]++;
ans+=*c[a[x]]-;
} inline void del(int x){
c[a[x]]--;
ans-=*c[a[x]]+;
} int main(){
n=read();m=read();k=read();
gap=n/sqrt(m*2.0/);
for(int i=;i<=n;i++){
a[i]=read();
}
for(int i=;i<=m;i++) q[i].l=read(),q[i].r=read();
for(int i=;i<=m;i++) q[i].id=i;
sort(q+,q+m+,cmp1);
l=;r=;
for(int i=;i<=m;i++){
int ql=q[i].l,qr=q[i].r;
while(l<ql) del(l),l++;
while(l>ql) l--,add(l);
while(r>qr) del(r),r--;
while(r<qr) r++,add(r);
q[i].ans=ans;
}
sort(q+,q+m+,cmp2);
for(int i=;i<=m;i++) printf("%d\n",q[i].ans);
return ;
}
题解 小B的询问的更多相关文章
- 小B的询问(题解)(莫队)
小B的询问(题解)(莫队) Junlier良心莫队 题目 luoguP2709 小B的询问 code #include<bits/stdc++.h> #define lst long lo ...
- BZOJ3781: 小B的询问
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 146 Solved: 98[Submit][Status] Descript ...
- bzoj 3781: 小B的询问 分块
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 196 Solved: 135[Submit][Status] Descrip ...
- BZOJ 3781: 小B的询问
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 643 Solved: 435[Submit][Status][Discuss ...
- Bzoj 3781: 小B的询问 莫队,分块,暴力
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 426 Solved: 284[Submit][Status][Discuss ...
- P2709 小B的询问(莫队)
P2709 小B的询问 莫队模板 资磁离线询问 维护两个跳来跳去的指针 先分块,蓝后询问按块排序. 蓝后每次指针左右横跳更新答案 #include<iostream> #include&l ...
- [洛谷 P2709] 小B的询问
P2709 小B的询问 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数 ...
- 2018.07.01 洛谷小B的询问(莫队)
P2709 小B的询问 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数 ...
- AC日记——小B的询问 洛谷 P2709
小B的询问 思路: 水题: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 50005 #define ll ...
随机推荐
- centos7搭建NFS服务
服务器端 139.155.90.78 客户端 192.168.198.146 先查看自己的系统有没有安装rpcbind 和nfs-utils rpm -qa nfs-utils rpcbind 若使 ...
- JS的精确简单的加减乘除
简单的写法: <script> function decNum(a){/*获取小数位数*/ var r=0; a=a.toString(); if(a.indexOf(".&qu ...
- 从入门到自闭之Python--虚拟环境如何安装
Windows下创建虚拟环境virtualenv 如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版 ...
- Docker——手动创建镜像
启动一个进入容器: 在阿里云镜像下载一个nginx: 退出容器: 查看 : docker ps -a oldboyedu是用户名 就像githua一样也有用户名 v1是别名 在创建个容器使用刚才创建的 ...
- Java Web ActiveMQ与WebService的异同
Webservice 和MQ(MessageQueue)都是解决跨平台通信的常用手段 一.WebService:用来远程调用服务,达到打通系统.服务复用的目的.是SOA系统架构——面向服务架构的体现. ...
- Flask框架学习篇(一)
安装好Python,pip install flask安装好flask后,开始编写第一个flask程序 #包含动态路由的flask程序from flask import Flask app= Flas ...
- fastadmin 页面添加编辑日期时间
添加 <div class="form-group"> <label class="control-label col-xs-12 col-sm-2&q ...
- Delphi TIdUDPServer组件
- centos 7 Apache-Tomcat-8.5.46 安装 Web 应用服务器
tomcat 官网版本地址:https://tomcat.apache.org/whichversion.html Servlet规格 JSP规范 EL规格 WebSocket规范 JASPIC规格 ...
- ubuntu安装软件apt-get
一. apt-get用法 apt 0.8.16~exp12ubuntu10.26 for i386 compiled on Aug 5 2015 19:06:21Usage: apt-get [op ...