bzoj 3339 莫队
题意:

求任意一个区间的SG函数。
想到线段树,但是线段树合并很麻烦。
线段树——分块。
分块的一个应用就是莫队算法。
怎么暴力递推呢?
从一个区间到另一个区间,Ans 取决于 Ans 和 加入和删除的这个数的大小比较。加入一个新数,可能导致Ans 变大,变到哪里去呢? 用一个cnt记录出现数值的个数。
变大到cnt=0的地方。
减去一个数,可能导致Ans 变小。这时就要看cnt 和 大小比较了。
#include <bits/stdc++.h> using namespace std; const int maxn = *; int N,M;
int a[maxn];
int pos[maxn];
int ans[maxn];
int cnt[maxn]; int Ans; struct Node {
int l,r;
int id;
}nodes[maxn]; bool cmp(Node a,Node b) {
if(pos[a.l]==pos[b.l])
return a.r < b.r;
return pos[a.l] < pos[b.l];
} void add(int x)
{
cnt[x]++;
if(Ans==x)
while(cnt[Ans])
Ans++;
} void del(int x)
{
cnt[x]--;
if(cnt[x]==&&x<Ans)Ans=x;
} int main(int argc, char const *argv[])
{
scanf("%d%d",&N,&M); int sz =ceil(sqrt(1.0*N));
for(int i=; i <=N; i++) {
scanf("%d",&a[i]);
pos[i] = (i-)/sz;
} for(int i=; i <= M; i++) {
scanf("%d%d",&nodes[i].l,&nodes[i].r);
nodes[i].id = i;
} sort(nodes+,nodes++M,cmp); int L = ,R = ;
Ans = ; for(int i=;i<=M;i++)
{
int id = nodes[i].id;
while(R<nodes[i].r)R++,add(a[R]);
while(L>nodes[i].l)L--,add(a[L]);
while(R>nodes[i].r)del(a[R]),R--;
while(L<nodes[i].l)del(a[L]),L++;
ans[id]=Ans;
} for(int i=; i <= M; i++)
printf("%d\n", ans[i]); return ;
}
bzoj 3339 莫队的更多相关文章
- BZOJ 3339 & 莫队+"所谓的暴力"
题意: 给一段数字序列,求一段区间内未出现的最小自然数. SOL: 框架显然用莫队.因为它兹瓷离线. 然而在统计上我打了线段树...用&维护的结点...400w的线段树...然后二分查找... ...
- bzoj 2038 莫队算法
莫队算法,具体的可以看10年莫涛的论文. 大题思路就是假设对于区间l,r我们有了一个答案,那么对于区间l,r+1,我们 可以暴力的转移一个答案,那么对于区间l1,r1和区间l2,r2,需要暴力处理 的 ...
- bzoj 3289 莫队 逆序对
莫队维护逆序对,区间左右增减要分类讨论. 记得离散化. /************************************************************** Problem: ...
- bzoj 3809 莫队
收获: 1.分块时顺便记录每个位置所属的块,然后一次排序就OK了. 2.要权衡在“区间移动”与“查询结果”之间的时间,莫队算法一般区间移动频率远大于查询结果,所以我们选择的辅助数据结构时就要注意了,我 ...
- bzoj 2038 莫队入门
http://www.lydsy.com/JudgeOnline/problem.php?id=2038 题意:多次询问区间内取出两个相同颜色的种类数 思路:由于不是在线更新,那么可以进行离线查询,而 ...
- BZOJ 3236 莫队+树状数组
思路: 莫队+树状数组 (据说此题卡常数) yzy写了一天(偷笑) 复杂度有点儿爆炸 O(msqrt(n)logn) //By SiriusRen #include <cmath> #in ...
- BZOJ 3339 && BZOJ 3585 莫队+权值分块
显然若一个数大于n就不可能是答案. #include <iostream> #include <cstring> #include <cstdio> #includ ...
- BZOJ 3809 莫队+(分块|BIT)
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> ...
- BZOJ 2308 莫队入门经典
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2038 参考博客 https://www.cnblogs.com/Paul-Guderi ...
随机推荐
- Ionic3,关于配置公共的css文件,引用非标准的文件(三)
说明 在开发过程中,很多样式为了能够共用,这样能够节省很大一部分时间用来编写样式,同时,一个完整的共用模板,在进行样式更换的时候,可以达到事半功倍的效果,因此在开发效率上也可以获得提高. 相关步骤: ...
- MySQL Flashback 闪回功能详解
1. 简介 mysqlbinlog flashback(闪回)用于快速恢复由于误操作丢失的数据.在DBA误操作时,可以把数据库恢复到以前某个时间点(或者说某个binlog的某个pos).比如忘了带wh ...
- string查找字符(串)
在C语言中 strchr 和 strstr函数都被包含在<string.h>头文件中,也就是要调用它们时要在程序前面包含<string.h>头文件,也就是写这个语句:#incl ...
- OSG DB的插件地址设置
今天搞了一整天OSG,结果每次都说could not find plugin,就是说找不到OSG的插件去加载文件,我大概看了下OSG的插件机制,发现他是用插件的形式下去读取文件的 http://blo ...
- 结合manage.py,在flask项目中使用websocket模块--- flask-socketio
前言: - 为什么我要使用 flask-socketio模块,而不是flask-sockets? - 因为flask-socketio与前端流行的websocket库socke ...
- 初学Hadoop之计算TF-IDF值
1.词频 TF(term frequency)词频,就是该分词在该文档中出现的频率,算法是:(该分词在该文档出现的次数)/(该文档分词的总数),这个值越大表示这个词越重要,即权重就越大. 例如:一篇文 ...
- Scrapy框架之代理和cookie
Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式.Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息.无论何时用户 ...
- link 和 import 导入外部样式的区别
差别一:link 属于 XHTML 标签,而 @import 完全是 CSS 提供的 一种方式.link标签除了可以加载 CSS 外,还可以做很多事情,比如定义 RSS ,定义 rel 链接属性等. ...
- 【阿里云产品公测】服务器测性能,PTS多快好省
作者:阿里云用户goldsix PTS(性能测试服务)的官方定位是:集测试机管理.测试脚本管理.测试场景管理.测试任务管理.测试结果管理为一体的性能云测试平台. 不管定义是否高大上,一般用户尤其是我 ...
- HQL(Hibernate Query Language)
1. NativeSQL > HQL > EJB QL(JP QL 1.0) > QBC(Query By Criteria) > QBE(Query By Example)2 ...