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 ...
随机推荐
- android上最多有多少个http连接?
1.使用HttpUrlConnection能有几个 测试机器版本是5.1.1 个数 网络连接是否报错 写文件是否报错 1024 A/art: art/runtime/indirect_refere ...
- 《The Python Standard Library》——http模块阅读笔记2
http.server是用来构建HTTP服务器(web服务器)的模块,定义了许多相关的类. 创建及运行服务器的代码一般为: def run(server_class=HTTPServer, handl ...
- oracle 笔记---(五)__内存管理
###查看连接池的信息 select connection_pool,status,maxsize from dba_cpool_info
- TOJ 1690 Cow Sorting (置换群)
Description Farmer John's N (1 ≤ N ≤ 10,000) cows are lined up to be milked in the evening. Each cow ...
- TOJ 2749 Absent Substrings
描述 Given a string of symbols, it’s natural to look it over and see what substrings are present. In t ...
- 负载均衡服务器中存在大量的TIME_WAIT怎么解决
首先需要明白什么是TIME_WAIT.TIME_WAIT是在tcp断开连接时进行四次回收的时候,主动断开端在收到被动关闭端的FIN包并发送ACK包给被动关闭后进入的状态.这个状态默认情况下是2倍的MS ...
- 给python解释器本身添加注册表
import sys from _winreg import * # tweak as necessary version = sys.version[:3] installpath = sys.pr ...
- hdu 5242——Game——————【树链剖分思想】
Game Time Limit:1500MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 线程操作之Thread类
在.Net fremework 中,所有与线程有关的操作都封装在System.Thread命名空间中, 所以在操作线程时,要先引入次命名空间 Thread类的常用方法 Abort 线程终止 Join ...
- 阿里巴巴国际站 网站和PC客户端都登录不了,其他电脑或手机可以
背景 昨天晚上,我还能打开阿里巴巴国际站,PC客户端也可以登录 今天早上起床打开电脑,发现国际站的网站打开不了,客户端也登录不了,提示了错误信息,但是其他电脑或手机就可以登录 原因分析 1.是不是本机 ...