题目大意:给一个数列,每次询问一个区间内有没有一个数出现次数超过一半。有,输出这个数,否则输出$0$

题解:主席树,查询区间第$\bigg\lfloor\dfrac{len+1}{2}\bigg\rfloor$大,并判断它出现次数是否大于$\Big\lfloor\dfrac{len}{2}\Big\rfloor$

卡点:

 

C++ Code:

  1. #include <cstdio>
  2. #define maxn 500010
  3. #define N (maxn * 22)
  4. int n, m;
  5. int root[maxn];
  6. int sz[N], lc[N], rc[N], idx;
  7. void insert(int &rt, int l, int r, int num) {
  8. lc[++idx] = lc[rt], rc[idx] = rc[rt], sz[idx] = sz[rt] + 1, rt = idx;
  9. if (l == r) return ;
  10. int mid = l + r >> 1;
  11. if (num <= mid) insert(lc[rt], l, mid, num);
  12. else insert(rc[rt], mid + 1, r, num);
  13. }
  14. int query(int L, int R, int l, int r, int k, int len) {
  15. if (l == r) {
  16. if (sz[R] - sz[L] > len / 2) return l;
  17. return 0;
  18. }
  19. int mid = l + r >> 1, SZ = sz[lc[R]] - sz[lc[L]];
  20. if (k <= SZ) return query(lc[L], lc[R], l, mid, k, len);
  21. else return query(rc[L], rc[R], mid + 1, r, k - SZ, len);
  22. }
  23.  
  24. int main() {
  25. scanf("%d%d", &n, &m);
  26. for (int i = 1, x; i <= n; i++) {
  27. scanf("%d", &x);
  28. root[i] = root[i - 1];
  29. insert(root[i], 1, n, x);
  30. }
  31. while (m --> 0) {
  32. int l, r;
  33. scanf("%d%d", &l, &r);
  34. printf("%d\n", query(root[l - 1], root[r], 1, n, r - l + 2 >> 1, r - l + 1));
  35. }
  36. return 0;
  37. }

  

[洛谷P3567][POI2014]KUR-Couriers的更多相关文章

  1. 2018.09.14 洛谷P3567 [POI2014]KUR-Couriers(主席树)

    传送门 简单主席树啊. 但听说有随机算法可以秒掉%%%(本蒟蒻并不会) 直接维护值域内所有数的出现次数之和. 当这个值不大于区间总长度的一半时显然不存在合法的数. 这样在主席树上二分查值就行了. 代码 ...

  2. 洛谷P3567[POI2014]KUR-Couriers(主席树+二分)

    题意:给一个数列,每次询问一个区间内有没有一个数出现次数超过一半 题解: 最近比赛太多,都没时间切水题了,刚好日推了道主席树裸题,就写了一下 然后 WA80 WA80 WA0 WA90 WA80 ?? ...

  3. 洛谷P3567 [POI2014]KUR-Couriers 主席树

    挺裸的,没啥可讲的. 不带修改的主席树裸题 Code: #include<cstdio> #include<algorithm> using namespace std; co ...

  4. [POI2014] KUR-Couriers(洛谷P3567)

    洛谷题目链接:[POI2014]KUR-Couriers 题目描述 Byteasar works for the BAJ company, which sells computer games. Th ...

  5. 洛谷 P3580 - [POI2014]ZAL-Freight(单调队列优化 dp)

    洛谷题面传送门 考虑一个平凡的 DP:我们设 \(dp_i\) 表示前 \(i\) 辆车一来一回所需的最小时间. 注意到我们每次肯定会让某一段连续的火车一趟过去又一趟回来,故转移可以枚举上一段结束位置 ...

  6. AC日记——[POI2014]KUR-Couriers 洛谷 P3567

    [POI2014]KUR-Couriers 思路: 卡空间,sb题: 代码: #include <bits/stdc++.h> using namespace std; #define m ...

  7. 洛谷P3567 KUR-Couriers [POI2014] 主席树/莫队

    正解:主席树/莫队 解题报告: 传送门! 这题好像就是个主席树板子题的样子,,,? 毕竟,主席树的最基本的功能就是,维护一段区间内某个数字的个数 但是毕竟是刚get到主席树,然后之前做的一直是第k大, ...

  8. 洛谷 3567/BZOJ 3524 Couriers

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2895  Solved: 1189[Submit][S ...

  9. 洛谷 P3573 [POI2014]RAJ-Rally 解题报告

    P3573 [POI2014]RAJ-Rally 题意: 给定一个\(N\)个点\(M\)条边的有向无环图,每条边长度都是\(1\). 请找到一个点,使得删掉这个点后剩余的图中的最长路径最短. 输入输 ...

随机推荐

  1. sax技术解析xml下jaxp解析器详细代码

    *解析xml的两种技术dom和sax dom:根据xml的层级结构在内存中分配一个树形结构,把xml标签,属性,文本封装成对象. sax方式:事件驱动,边读边解析. 在javax.xml.parser ...

  2. CentOS7下PHP7.2安装redis扩展

    1.安装phpize(存在忽略) yum install php-devel 2.下载扩展源码包,直接用wget,一般放在 /usr/local/src wget https://github.com ...

  3. webBrowser 应用编程函数总结

    /*============================说明部分================================= 实现一下函数需包含头文件 #include <Winine ...

  4. Hash学习笔记

    啊啊啊啊,这篇博客估计是我最早的边写边学的博客了,先忌一忌. 本文章借鉴与一本通提高篇,但因为是个人的学习笔记,因此写上原创. 目录 谁TM边写边学还写这玩意? 后面又加了 Hash Hash表 更多 ...

  5. 学习CSS

    CSS教程 菜鸟教程 通过使用CSS我们可以大大提升网页开发的工作效率 什么是CSS? CSS指层叠样式表(Cascading Style Sheets) 样式定义如何显示HTML元素 样式通常存储在 ...

  6. xpath简单入门

    语法: 选取节点: 实例: (贴图转载自w3school) 补充: /a/@href        #获取a标签的href属性 当<div class="demo">& ...

  7. IDEA中SVN的使用

    文件红色:表示文件没有添加到服务器 绿色:表示没有更新新的修改到服务器 普通黑色:表示和服务器同步 1.如何让修改的文件的父文件也变成蓝色(未提交的状态) 2.其中的1.6 format 1.7 fo ...

  8. RelativeSource设定绑定方向

    <Window x:Class="Yingbao.Chapter2.RelativeEx.AppWin" xmlns="http://schemas.microso ...

  9. c/c++ 数组传参

    在c/c++中,在进行数组传参时,数组的元素个数默认是不作为实参传入调用函数,也就是说c/c++ 不允许向函数传递一个完整的数组作为参数 实例: 1.形式参数是一个指针,实参包括数组长度: 1 voi ...

  10. Django调试models输出的SQL语句

    django1.3在shell下,调试models变得更为简单了,不用像之前的版本,手工去调用django query,才能打印出之前的代码是执行的什么SQL语句. 1.3开始只需在settings. ...