数据结构题(莫队算法)
数据结构题
题目:
问在区间[l,r]和[l1,r1]内x的出现次数的乘积是多少?
题解:
莫队算法的模板题
关于莫队算法你可以参考这个
我这里简单的说说我对莫队的理解:
莫队是一个优雅的暴力,就是将原本复杂度不能过的程序进行优化,莫队是通过分块来实现
如果暴力做这个题,查询区间[l,r]内x的数量我们可能就从头开始搜查,按照题目给的数据来搜查,但其实我们可以这样优化,比如题目给的查询区间[3,4],[2,4],[1,5],我们可以先查询[1,5],然后顺势查询[2,4],最后[3,4],而非从头开始,这样就省了不少时间。那如何实现这个?我们可以对整体进行分块,然后按照所分的快进行排序,尽可能实现查询区间时省时省力,最后再输出答案
至于为什么要分块排序呢?可以看看莫队算法的讲解
很显然这是一个离线算法,且适合查询量很大的情况
代码如下
代码:
#include<bits/stdc++.h>
#define forn(i,a,b) for(ll i=a;i<=b;i++)
#define INF 0x3f3f3f3f
using namespace std;#define ll long long
const ll N =100*1000+10;
const ll mod = 20180623;
ll n,m;
ll a[N],ans[N*2],num[N],pos[N];
struct node{ll L,R,x,id;
}t[N*2];bool cmp(node a,node b){if(pos[a.L]==pos[b.L])return a.R<b.R;else return pos[a.L]<pos[b.L];
}ll L=1,R=0;
void solve(node p){while(p.L>L){num[a[L]]--;L++;}while(p.R>R){R++;num[a[R]]++;}while(p.L<L){L--;num[a[L]]++;}while(p.R<R){num[a[R]]--;R--;}
}int main(){scanf("%lld %lld",&n,&m);memset(num,0,sizeof(num));ll block=sqrt(n);for(ll i=1;i<=n;i++){scanf("%lld",a+i);pos[i]=i/block;}for(ll i=1;i<=m;i++){ll l1,r1,l2,r2,x;scanf("%lld%lld%lld%lld%lld",&l1,&r1,&l2,&r2,&x);if(l1>r1)swap(l1,r1);if(l2>r2)swap(l2,r2);t[i].L=l1;t[i].R=r1;t[i].id=i;t[i].x=x;t[i+m].L=l2;t[i+m].R=r2;t[i+m].id=i+m;t[i+m].x=x;}sort(t+1,t+1+2*m,cmp);memset(num,0,sizeof(num));for(ll i=1;i<=2*m;i++){solve(t[i]);ans[t[i].id]=num[t[i].x];}for(ll i=1;i<=m;i++)printf("%lld\n%lld\n%lld\n",ans[i]%mod,ans[i+m]%mod,(ans[i]%mod*ans[i+m])%mod);return 0;
}
数据结构题(莫队算法)相关推荐
- 数据结构(莫队算法):国家集训队2010 小Z的袜子
[题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 9894 Solved: 4561 [Su ...
- 曼哈顿距离最小生成树与莫队算法(总结)
曼哈顿距离最小生成树与莫队算法(总结) 1 曼哈顿距离最小生成树 曼哈顿距离最小生成树问题可以简述如下: 给定二维平面上的N个点,在两点之间连边的代价为其曼哈顿距离,求使所有点连通的最小代价. 朴 ...
- 【BZOJ2038】小Z的袜子,第一次的莫队算法
传送门 写在前面:莫队竟如此暴力-- 思路:当初我对这个题的第一感觉--这个区间问题可以用线段树或者树状数组?答案当然是不能,于是我就去简单学了下莫队算法.在我看来,莫队(分块版,不是二维曼哈顿距离什 ...
- 曼哈顿距离最小生成树莫队算法
参考资料:https://www.cnblogs.com/CsOH/p/5904430.html https://blog.csdn.net/huzecong/article/details/8576 ...
- Hello 莫队----莫队算法小结
跟风学莫队,发现竟不会.博客一大堆,不知该看谁. 刚开始要学习莫队的时候发现那么多的博客,真有乱花渐欲迷人眼的感觉,后来觉得不妨看看集训队的论文,才发现根本找不到,说是10-13年是作业的形式,根本没 ...
- 普通、带修(可持久化)莫队算法入门例题详解
目录 [莫队算法] [普通莫队] [代码] [题面] [带修莫队] [代码] [题面] [总结] [莫队算法] 参考大米饼的莫队算法 ,目前的题型概括为三种:普通莫队,带修莫队以及树形莫队. [普通莫 ...
- NBUT 1457 Sona(莫队算法+离散化)
[1457] Sona 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Sona, Maven of the Strings. Of cause, she can play the ...
- C++ 莫队算法(转)
胡小兔的良心莫队教程:莫队.带修改莫队.树上莫队 在开始学习莫队之前,照例先甩一道例题:BZOJ 1878 HH的项链. 题意:求区间内数的个数,相同的数只算一次. 在我关于这道题的上一篇题解中,我使 ...
最新文章
- 程序员心中都有一个江湖,java世界,就是一个江湖!
- 智能产品AI服务智商的权重研究|未来研究
- IT兄弟连 JavaWeb教程 EL表达式获取对象的属性以及数组的元素
- boot mybatis mysql_SpringBoot+Mybatis+MySql学习
- Html页面上输出不了PHP,在页面上直接输出未经解析的HTML源码
- nodejs操作sqlserver数据_nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例...
- mysql8.0.11创建用户报错_mysql8.0创建用户授予权限报错解决方法
- 管家机器人先生txt_《管家机器人先生》(主角墨青如玉)大结局全文阅读
- 【新年假期宅家系列】动漫游戏集中营
- 20190830每日一句
- 【NLP】HuggingFace BERT 微博评论情感分类
- android studio下载sdk的方法,Android Studio修改Android SDK路径的几种方法
- 【报告分享】 2020-2021年数字内容产业趋势报告-企鹅智库 (附下载)
- 第八届中国智慧城市建设技术研讨会总体日程安排
- vue3和vue2中mian.js的区别,在其中配置路由为例
- 教父三部曲观后感总结
- r5 7600x和r7 7700x差距
- REUSE_ALV_GRID_DISPLAY_LVC 实现按钮切换ALV编辑状态示例
- 微信公众号 语音转文字api_原来微信不仅能实现语音转文字,还能实现文字转语音!你还不知吗...
- 如何回答「为什么想做产品经理」【面试核心问题3】
热门文章
- 竞赛发布|100万奖金寻DT时代“最强大脑”!
- 代码传奇 | 明明可以靠颜值 却用代码把人类送上了月球的女人——Margaret Hamilton
- mysql 堆叠查询_SQL 注入方法 - 盲注、报错注入、UNION查询注入与堆叠注入
- 输出毫秒_自学单片机第十三篇上:单点输出
- php输出PDF的文件流_怎么用PHP在HTML中生成PDF文件
- hilbert曲线序编码matlab,Hilbert曲线扫描矩阵的生成算法及其MATLAB程序代码
- dos下设置mysql密码_MySQL数据库之dos或wamp下修改mysql密码的具体方法
- python list转dict_python中将list转为dict
- c++ 模板类实现堆栈实验报告_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之1:问题定义以及总体功能...
- yolo算法的优缺点分析_yolo算法介绍