直接跑了莫队勉强跑过,正解应该是一开始算出所有区间[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相关推荐

  1. BZOJ 3489: A simple rmq problem

    3489: A simple rmq problem Time Limit: 40 Sec  Memory Limit: 600 MB Submit: 1594  Solved: 520 [Submi ...

  2. 线段树/扫描线问卷调查反馈——Rmq Problem / mex(主席树),Boring Queries(二分+st表+主席树),Colorful Squares(扫描线)

    文章目录 Rmq Problem / mex Boring Queries Colorful Squares Rmq Problem / mex luogu4137 对aia_iai​建权值线段树 再 ...

  3. AC日记——Periodic RMQ Problem codeforces 803G

    G - Periodic RMQ Problem 思路: 题目给一段序列,然后序列复制很多次: 维护序列很多次后的性质: 线段树动态开点: 来,上代码: #include <cstdio> ...

  4. BZOJ3489 A simple rmq problem 【可持久化树套树】*

    BZOJ3489 A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一 ...

  5. 【BZOJ3489】A simple rmq problem kd-tree

    [BZOJ3489]A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过 ...

  6. 19.CF803G Periodic RMQ Problem 线段树+分块+线段树标记

    19.CF803G Periodic RMQ Problem 线段树+分块+线段树标记 个人Limitの线段树题单题解主目录:Limitの线段树题单 题解目录_HeartFireY的博客-CSDN博客 ...

  7. CF803G-Periodic RMQ Problem【离散化,线段树,ST表】

    正题 题目链接:https://www.luogu.com.cn/problem/CF803G 题目大意 一个长度为nnn的序列aaa复制kkk份连接,要求支持 区间赋值 区间查询最小值 n,q∈[1 ...

  8. 【BZOJ】3339: Rmq Problem 3585: mex(线段树+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3585 好神的题. 但是!!!!!!!!!!!!!!我线段树现在要开8倍空间才能过!!!!!!!!!! ...

  9. bzoj 3489 A simple rmq problem——主席树套线段树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3489 题解:http://www.itdaan.com/blog/2017/11/24/9b ...

最新文章

  1. vlan配置实例详解_【精品网络干货】二层MSTP防环技术详解
  2. 华为防火墙查看日志命令_防火墙接入互联网方式,到底有哪些呢?5分钟学会防火墙入网...
  3. vuex 基本入门和使用(一)
  4. go语言io reader_【已解决】go语言中如何使用io的MultiWriter
  5. php aes 3des区别,AES和3DES之间的区别
  6. 微信H5支付(基于Java实现微信H5支付)
  7. kafka源码1-生产者
  8. pytorch梯度累积
  9. Java web编程(一)
  10. 史上最全的微信小程序代码大全分享
  11. 烽火HG680-KA机顶盒 卡开机界面、救砖、强刷失败、ADB教程及固件分享
  12. Unity UI 框架
  13. Windows应急响应 -Windows日志排查,系统日志,Web应用日志,
  14. css3-animation-复习篇
  15. java简介,java特点,java应用领域
  16. hadoop之旅8-centerOS7 : Hive的基本操作
  17. Base64编码和其隐写术
  18. Linux文件目录权限管理
  19. Python依赖管理和打包工具poetry
  20. java gif合成_javacv之于视频/GIF解帧及重新拼接生成GIF实现

热门文章

  1. python打开文件报错无效序列_psycopg2.DataError:编码“UTF8”的字节序列无效:0xa0
  2. mysql通配符_mysql通配符进行模糊查询
  3. 配置透明网桥实现QinQ传输案例
  4. 云原生背景下故障演练体系建设的思考与实践—云原生混沌工程系列之指南篇
  5. 阿里 双11 同款,流量防卫兵 Sentinel go 源码解读
  6. linux中bash的功能主要有,Linux系统中的Bash功能的介绍
  7. 反转给定区间的链表C语言,寻找素数对(C++)
  8. python3断言_Python3断言
  9. input 单选框ajax提交,input radio单选框绑定change事件
  10. python xlwt写入excel_python xlwt模块写入excel超过65536行报错问题解决方法