数据结构题

题目:

问在区间[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;
}

数据结构题(莫队算法)相关推荐

  1. 数据结构(莫队算法):国家集训队2010 小Z的袜子

    [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到 ...

  2. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 9894  Solved: 4561 [Su ...

  3. 曼哈顿距离最小生成树与莫队算法(总结)

    曼哈顿距离最小生成树与莫队算法(总结) 1 曼哈顿距离最小生成树 曼哈顿距离最小生成树问题可以简述如下:  给定二维平面上的N个点,在两点之间连边的代价为其曼哈顿距离,求使所有点连通的最小代价.  朴 ...

  4. 【BZOJ2038】小Z的袜子,第一次的莫队算法

    传送门 写在前面:莫队竟如此暴力-- 思路:当初我对这个题的第一感觉--这个区间问题可以用线段树或者树状数组?答案当然是不能,于是我就去简单学了下莫队算法.在我看来,莫队(分块版,不是二维曼哈顿距离什 ...

  5. 曼哈顿距离最小生成树莫队算法

    参考资料:https://www.cnblogs.com/CsOH/p/5904430.html https://blog.csdn.net/huzecong/article/details/8576 ...

  6. Hello 莫队----莫队算法小结

    跟风学莫队,发现竟不会.博客一大堆,不知该看谁. 刚开始要学习莫队的时候发现那么多的博客,真有乱花渐欲迷人眼的感觉,后来觉得不妨看看集训队的论文,才发现根本找不到,说是10-13年是作业的形式,根本没 ...

  7. 普通、带修(可持久化)莫队算法入门例题详解

    目录 [莫队算法] [普通莫队] [代码] [题面] [带修莫队] [代码] [题面] [总结] [莫队算法] 参考大米饼的莫队算法 ,目前的题型概括为三种:普通莫队,带修莫队以及树形莫队. [普通莫 ...

  8. NBUT 1457 Sona(莫队算法+离散化)

    [1457] Sona 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Sona, Maven of the Strings. Of cause, she can play the ...

  9. C++ 莫队算法(转)

    胡小兔的良心莫队教程:莫队.带修改莫队.树上莫队 在开始学习莫队之前,照例先甩一道例题:BZOJ 1878 HH的项链. 题意:求区间内数的个数,相同的数只算一次. 在我关于这道题的上一篇题解中,我使 ...

最新文章

  1. 程序员心中都有一个江湖,java世界,就是一个江湖!
  2. 智能产品AI服务智商的权重研究|未来研究
  3. IT兄弟连 JavaWeb教程 EL表达式获取对象的属性以及数组的元素
  4. boot mybatis mysql_SpringBoot+Mybatis+MySql学习
  5. Html页面上输出不了PHP,在页面上直接输出未经解析的HTML源码
  6. nodejs操作sqlserver数据_nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例...
  7. mysql8.0.11创建用户报错_mysql8.0创建用户授予权限报错解决方法
  8. 管家机器人先生txt_《管家机器人先生》(主角墨青如玉)大结局全文阅读
  9. 【新年假期宅家系列】动漫游戏集中营
  10. 20190830每日一句
  11. 【NLP】HuggingFace BERT 微博评论情感分类
  12. android studio下载sdk的方法,Android Studio修改Android SDK路径的几种方法
  13. 【报告分享】 2020-2021年数字内容产业趋势报告-企鹅智库 (附下载)
  14. 第八届中国智慧城市建设技术研讨会总体日程安排
  15. vue3和vue2中mian.js的区别,在其中配置路由为例
  16. 教父三部曲观后感总结
  17. r5 7600x和r7 7700x差距
  18. REUSE_ALV_GRID_DISPLAY_LVC 实现按钮切换ALV编辑状态示例
  19. 微信公众号 语音转文字api_原来微信不仅能实现语音转文字,还能实现文字转语音!你还不知吗...
  20. 如何回答「为什么想做产品经理」【面试核心问题3】

热门文章

  1. 竞赛发布|100万奖金寻DT时代“最强大脑”!
  2. 代码传奇 | 明明可以靠颜值 却用代码把人类送上了月球的女人——Margaret Hamilton
  3. mysql 堆叠查询_SQL 注入方法 - 盲注、报错注入、UNION查询注入与堆叠注入
  4. 输出毫秒_自学单片机第十三篇上:单点输出
  5. php输出PDF的文件流_怎么用PHP在HTML中生成PDF文件
  6. hilbert曲线序编码matlab,Hilbert曲线扫描矩阵的生成算法及其MATLAB程序代码
  7. dos下设置mysql密码_MySQL数据库之dos或wamp下修改mysql密码的具体方法
  8. python list转dict_python中将list转为dict
  9. c++ 模板类实现堆栈实验报告_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之1:问题定义以及总体功能...
  10. yolo算法的优缺点分析_yolo算法介绍