入门oj 6492: 小B的询问
Description
Input
第二行,N个整数,表示小B的序列。
接下来的M行,每行两个整数L、R。
1<=N、M、K<=50000
Output
Sample Input
6 4 3
1 3 2 1 1 3
1 4
2 6
3 5
5 6
Sample Output
6 //在区间[1..4]]之间,1出现了2次,2和3分别出现1次,于是结果=4+1+1=6
9
5
2
HINT
1莫队算法
2因为是求出Sigma(c(i)^2)的值,所以在模板上要改进一下
3可知当c(i)++,总和加上c(i+1)^-c(i)^=c(i)*2+1,就有了代码中的ans+=num[x]*2+1;(如果在最后再枚举一遍会超时,所以要在线统计,c(i)--的情况读者可以先自行推导再看代码)
#include<bits/stdc++.h>
using namespace std;
long long n,m,cnt[200000],ans,k,num[1000001],l,r,anss[200001];
struct data {
long long ll,rr,num;
}a[200001];
bool cmp(data c,data d) {
long long bol=sqrt(n);
if(c.ll/bol==d.ll/bol)
return c.rr<d.rr;
else
return c.ll/bol<d.ll/bol;
}//莫队排序
void add(long long xx){
long long x=cnt[xx];
ans+=num[x]*2+1;
num[x]++; }
void del(long long xx){
long long x=cnt[xx];
if(num[x]-1>=0)
ans=ans-num[x]*2+1,
num[x]--;
}
void dowork(long long x){
while(l>a[x].ll) add(--l);
while(r<a[x].rr) add(++r);
while(l<a[x].ll) del(l++);
while(r>a[x].rr) del(r--);
anss[a[x].num]=ans;
}//莫队板子
int main(){
cin>>n>>m>>k;
for(long long i=1;i<=n;i++){
scanf("%lld",&cnt[i]);
}
for(long long i=1;i<=m;i++){
scanf("%lld%lld",&a[i].ll,&a[i].rr);
a[i].num=i;
}
sort(a+1,a+m+1,cmp);
for(long long i=1;i<=m;i++){
dowork(i);
}
for(long long i=1;i<=m;i++)
printf("%lld\n",anss[i]);
}
--
入门oj 6492: 小B的询问的更多相关文章
- BZOJ 3781: 小B的询问
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 643 Solved: 435[Submit][Status][Discuss ...
- 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: 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)表示数 ...
- 【入门OJ】2003: [Noip模拟题]寻找羔羊
这里可以复制样例: 样例输入: agnusbgnus 样例输出: 6 这里是链接:[入门OJ]2003: [Noip模拟题]寻找羔羊 这里是题解: 题目是求子串个数,且要求简单去重. 对于一个例子(a ...
- AC日记——小B的询问 洛谷 P2709
小B的询问 思路: 水题: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 50005 #define ll ...
随机推荐
- PyQt(Python+Qt)学习随笔:模式窗口的windowModality属性与modal属性
windowModality属性 windowModality属性只对窗口对象有效,保存的是哪些类型的窗口被模式窗口阻塞. 模式窗口防止其他窗口中的部件获取输入.此属性的值控制对应窗口可见时阻塞哪些类 ...
- linux常用快捷键总结
启动器:<super> 显示桌面:<super>D 文件管理器:<super>E 显示工作区:<super>S 打开终端:ctrl+alt+T 关闭窗口 ...
- spring框架半自动注解
为了简便我们的开发,让我们一起来学习半自动注解吧. 让Spring管理某些类 1.在需要被SpringIOC容器管理的类上打上相应的注解 @Component:任意组件 @Controller:控制层 ...
- 冲刺Day6
每天举行站立式会议照片: 昨天已完成的工作: 1.确认商品搜索栏页面(全) 2.订单模块的大部分代码 3.用户模块的大部分代码 今天计划完成的工作: 成员 任务 高嘉淳 检查用户模块的功能并更正 覃泽 ...
- 手写线程池,对照学习ThreadPoolExecutor线程池实现原理!
作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...
- 【学习笔记】最小直径生成树(MDST)
简介 无向图中某一点(可以在顶点上或边上),这个点到所有点的最短距离的最大值最小,那么这个点就是 图的绝对中心. 无向图所有生成树中,直径最小的一个,被称为 最小直径生成树. 图的绝对中心的求法 下文 ...
- 新手关于C++ cin 的返回值
cin是C++的标准输入流,其本身是一个对象,并不存在返回值的概念. 不过经常会有类似于 while(cin>>a) 的调用,这里并不是cin的返回值,应该关注">> ...
- 在线CC攻击网站源码
源码目录 index.html 首页 cc.php 核心文件 count.php 使用统计 pv.php 访问测试页面 ip.txt 代理IP数据文件 运行方式 域名/?url=目标网址 要先获取代{ ...
- 可选链plugin-proposal-optional-chaining的使用(优化)
第一步 安装 npm install --save-dev @babel/plugin-proposal-optional-chaining 然后在.babelrc.js文件夹里进行配置 plugin ...
- Day8 python高级特性-- 迭代 Iteration
通过for循环来遍历 list.tuple.dict.甚至是字符串,这种遍历被称为迭代. 相比于C的for循环, Python的for循环抽象成都更好,不仅可以用在list或tuple上,还可以用在其 ...