bzoj3339 Rmq Problem
直接跑了莫队勉强跑过,正解应该是一开始算出所有区间[1,i]的sg值,然后考虑从区间[1,i]到区间[2,i]的sg值变换,发现只有区间[2,next[a[1]]-1]内,sg值大于a[1]的数字sg值全部变成a[1],这里next[a[1]]表示下一个与a[1]相同的数字的位置。用线段树维护一下即可。
莫队代码
1 #include<cstdio> 2 #include<algorithm> 3 #define N 500010 4 using namespace std; 5 int n,m,i,a[N],ans[N],sum[N],L,R,s[N]; 6 struct g{ 7 int l,r,id; 8 }b[N]; 9 bool cmp(g a,g b) 10 { 11 if (a.l/400==b.l/400) 12 return a.r<b.r; 13 return a.l/400<b.l/400; 14 } 15 void cc(int x,int w) 16 { 17 if ((s[a[x]]==0)&&(w>1)) sum[a[x]/400]++; 18 if ((s[a[x]]==1)&&(w<-1)) sum[a[x]/400]--; 19 s[a[x]]+=w; 20 } 21 int query() 22 { 23 int i; 24 for (i=0;;i++) 25 if (sum[i]==400) continue;else break; 26 int j; 27 for (j=400*i;;j++) 28 if (s[j]) continue;else break; 29 return j; 30 } 31 int main() 32 { 33 scanf("%d%d",&n,&m); 34 for (i=1;i<=n;i++) 35 scanf("%d",&a[i]); 36 for (i=1;i<=m;i++) 37 { 38 scanf("%d%d",&b[i].l,&b[i].r); 39 b[i].id=i; 40 } 41 sort(b+1,b+1+m,cmp); 42 L=1;R=0; 43 for (i=1;i<=m;i++) 44 { 45 46 while (R<b[i].r) R++,cc(R,1); 47 while (R>b[i].r) cc(R,-1),R--; 48 while (L<b[i].l) cc(L,-1),L++; 49 while (L>b[i].l) L--,cc(L,1); 50 ans[b[i].id]=query(); 51 } 52 for (i=1;i<=m;i++) 53 printf("%d\n",ans[i]); 54 }
转载于:https://www.cnblogs.com/fzmh/p/5391481.html
bzoj3339 Rmq Problem相关推荐
- BZOJ 3489: A simple rmq problem
3489: A simple rmq problem Time Limit: 40 Sec Memory Limit: 600 MB Submit: 1594 Solved: 520 [Submi ...
- 线段树/扫描线问卷调查反馈——Rmq Problem / mex(主席树),Boring Queries(二分+st表+主席树),Colorful Squares(扫描线)
文章目录 Rmq Problem / mex Boring Queries Colorful Squares Rmq Problem / mex luogu4137 对aia_iai建权值线段树 再 ...
- AC日记——Periodic RMQ Problem codeforces 803G
G - Periodic RMQ Problem 思路: 题目给一段序列,然后序列复制很多次: 维护序列很多次后的性质: 线段树动态开点: 来,上代码: #include <cstdio> ...
- BZOJ3489 A simple rmq problem 【可持久化树套树】*
BZOJ3489 A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一 ...
- 【BZOJ3489】A simple rmq problem kd-tree
[BZOJ3489]A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过 ...
- 19.CF803G Periodic RMQ Problem 线段树+分块+线段树标记
19.CF803G Periodic RMQ Problem 线段树+分块+线段树标记 个人Limitの线段树题单题解主目录:Limitの线段树题单 题解目录_HeartFireY的博客-CSDN博客 ...
- CF803G-Periodic RMQ Problem【离散化,线段树,ST表】
正题 题目链接:https://www.luogu.com.cn/problem/CF803G 题目大意 一个长度为nnn的序列aaa复制kkk份连接,要求支持 区间赋值 区间查询最小值 n,q∈[1 ...
- 【BZOJ】3339: Rmq Problem 3585: mex(线段树+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=3585 好神的题. 但是!!!!!!!!!!!!!!我线段树现在要开8倍空间才能过!!!!!!!!!! ...
- bzoj 3489 A simple rmq problem——主席树套线段树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3489 题解:http://www.itdaan.com/blog/2017/11/24/9b ...
最新文章
- vlan配置实例详解_【精品网络干货】二层MSTP防环技术详解
- 华为防火墙查看日志命令_防火墙接入互联网方式,到底有哪些呢?5分钟学会防火墙入网...
- vuex 基本入门和使用(一)
- go语言io reader_【已解决】go语言中如何使用io的MultiWriter
- php aes 3des区别,AES和3DES之间的区别
- 微信H5支付(基于Java实现微信H5支付)
- kafka源码1-生产者
- pytorch梯度累积
- Java web编程(一)
- 史上最全的微信小程序代码大全分享
- 烽火HG680-KA机顶盒 卡开机界面、救砖、强刷失败、ADB教程及固件分享
- Unity UI 框架
- Windows应急响应 -Windows日志排查,系统日志,Web应用日志,
- css3-animation-复习篇
- java简介,java特点,java应用领域
- hadoop之旅8-centerOS7 : Hive的基本操作
- Base64编码和其隐写术
- Linux文件目录权限管理
- Python依赖管理和打包工具poetry
- java gif合成_javacv之于视频/GIF解帧及重新拼接生成GIF实现
热门文章
- python打开文件报错无效序列_psycopg2.DataError:编码“UTF8”的字节序列无效:0xa0
- mysql通配符_mysql通配符进行模糊查询
- 配置透明网桥实现QinQ传输案例
- 云原生背景下故障演练体系建设的思考与实践—云原生混沌工程系列之指南篇
- 阿里 双11 同款,流量防卫兵 Sentinel go 源码解读
- linux中bash的功能主要有,Linux系统中的Bash功能的介绍
- 反转给定区间的链表C语言,寻找素数对(C++)
- python3断言_Python3断言
- input 单选框ajax提交,input radio单选框绑定change事件
- python xlwt写入excel_python xlwt模块写入excel超过65536行报错问题解决方法