hicoder - 1068 【RMQ or 线段树】

RMQ:

 1 #include <bits/stdc++.h>
 2 #define rep(i,a,b) for(int i = a;i <= b;++ i)
 3 #define per(i,a,b) for(int i = a;i >= b;-- i)
 4 #define mem(a,b) memset((a),(b),sizeof((a)))
 5 #define FIN freopen("in.txt","r",stdin)
 6 #define IO ios_base::sync_with_stdio(0),cin.tie(0)
 7 #define pb push_back
 8 using namespace std;
 9 typedef long long LL;
10 typedef pair<int, int> PIR;
11 const int N = 1e6+5;
12
13 int n, m, l, r, mm[N], a[N], dp[N][20];
14
15 void RMQ_init(){
16     rep(i, 1, n)    dp[i][0] = a[i];
17     for(int j = 1; (1<<j) <= n; ++j){
18         for(int i = 0; i+(1<<j)-1 <= n; ++i)
19             dp[i][j] = min(dp[i][j-1], dp[i+(1<<(j-1))][j-1]);
20     }
21 }
22 int RMQ(int l, int r){
23     int k = 0;
24     while(1<<(k+1) <= r-l+1)    k++;
25     return min(dp[l][k], dp[r-(1<<k)+1][k]);
26 }
27 int main()
28 {//IO;
29     //FIN;
30     scanf("%d", &n);
31     rep(i, 1, n)    scanf("%d", &a[i]);
32     RMQ_init();
33     scanf("%d", &m);
34     while(m--){
35         scanf("%d%d", &l, &r);
36         printf("%d\n", RMQ(l, r));
37     }
38     return 0;
39 }

View Code

线段树:

 1 #include <bits/stdc++.h>
 2 #define rep(i,a,b) for(int i = a;i <= b;++ i)
 3 #define per(i,a,b) for(int i = a;i >= b;-- i)
 4 #define mem(a,b) memset((a),(b),sizeof((a)))
 5 #define FIN freopen("in.txt","r",stdin)
 6 #define IO ios_base::sync_with_stdio(0),cin.tie(0)
 7 #define pb push_back
 8 #define mid ((l+r)>>1)
 9 #define ls (id<<1)
10 #define rs ((id<<1)|1)
11 using namespace std;
12 typedef long long LL;
13 typedef pair<int, int> PIR;
14 const int N = 1e6+5;
15
16 int n, m, op, x, y, a[N];
17
18 struct Node{
19     int minn;
20 }node[N*4];
21 void pushUp(int id, int l, int r){
22     node[id].minn = min(node[ls].minn, node[rs].minn);
23 }
24 void build(int id, int l, int r){
25     if(l == r)  { node[id].minn = a[l]; return; }
26     build(ls, l, mid);
27     build(rs, mid+1, r);
28     pushUp(id, l, r);
29 }
30 void update(int id, int l, int r, int p, int val){
31     if(l == r && l == p)    { node[id].minn = val; return; }
32     if(p <= mid)    update(ls, l, mid, p, val);
33     else    update(rs, mid+1, r, p, val);
34     pushUp(id, l, r);
35 }
36 int query(int id, int l, int r, int ql, int qr){
37     if(l == ql && r == qr)  return node[id].minn;
38     if(qr <= mid)   query(ls, l, mid, ql, qr);
39     else if(ql > mid)   query(rs, mid+1, r, ql, qr);
40     else{
41         return min(query(ls, l, mid, ql, mid), query(rs, mid+1, r, mid+1, qr));
42     }
43 }
44 int main()
45 {IO;
46     //FIN;
47     scanf("%d", &n);
48     rep(i, 1, n)    scanf("%d", &a[i]);
49     build(1, 1, n);
50     scanf("%d", &m);
51     while(m--){
52         scanf("%d %d", &x, &y);
53         printf("%d\n", query(1, 1, n, x, y));
54     }
55     return 0;
56 }

View Code

posted on 2017-04-25 20:38 NWU_ACM 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/NWUACM/p/6764227.html

hicoder - 1068 【RMQ or 线段树】相关推荐

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

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

  2. poj 3264 Balanced Lineup RMQ问题 线段树

    For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One d ...

  3. NYOJ 1068 ST(线段树之 成段更新+区间求和)

    ST 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 "麻雀"lengdan用随机数生成了后台数据,但是笨笨的他被妹纸的问题给难住了... 已知len ...

  4. HDU 6194 string string string 后缀数组 + RMQ(线段树)

    传送门:HDU6194 题意:问给定字符串中有多少种出现k次的子串. 思路:首先想到后缀数组经典问题,求出现不少于k次的子串的最大长度,类似的这题肯定就是在height数组上搞事情啦. 将height ...

  5. CodeForces - 1422F Boring Queries(主席树+线段树/RMQ)

    题目链接:点击查看 题目大意:给出 n 个数组成的数组 a ,再给出 m 次询问,每次询问需要回答区间 [ l , r ] 中所有元素的最小公倍数,强制在线 题目分析:首先考虑多个数的最小公倍数该如何 ...

  6. HDU3183 A Magic Lamp —— 贪心(单调队列优化)/ RMQ / 线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183 题解: 方法一:贪心. 在草稿纸上试多几次可以知道,删除数字中从左到右最后一位递增(可以等于)的 ...

  7. 【听说是线段树】bzoj1012 [JSOI2008]最大数maxnumber

    一眼看题目吓了一跳:这TM不就是单调队列吗,200000又怎样,大不了我二分嘛 系统提示:成功开启 手残模式 开始瞎写: 1 #include <cstdio> 2 long long a ...

  8. 线段树练习——区间合并

    这类题目会询问区间中满足条件的连续最长区间,所以PushUp的时候需要对左右儿子的区间进行合并(这里最难理解) hdu 3308 http://acm.hdu.edu.cn/showproblem.p ...

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

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

最新文章

  1. unity 可滚动文本_Unity3d如何实现滚动文本框?
  2. 产品网络推广方案浅谈网站的相关性对优化的影响!
  3. 计算机软件硬件试讲,试讲:初识计算机网络
  4. Cloud.com今天正式上线了
  5. python --- opencv部分学习
  6. [渝粤教育] 广东-国家-开放大学 21秋期末考试财务管理10164k2 (2)
  7. 程序员---不要对自己说“不可能”
  8. CentOS64位下python2.6升级到2.7的详细教程
  9. md5 php 加密后乱码_PHP md5函数 的16位字符乱码问题解决-阿里云开发者社区
  10. filter - date 日期插件
  11. C++ char/byte 转16进制字符串
  12. linux 查看fd命令,Linux中一种友好的find替代工具(fd命令)
  13. Linux - 计划任务
  14. spec文件知识整理
  15. R语言逻辑回归Logistic回归分析预测股票涨跌
  16. docker仓库mysql所有版本_Docker 安装 MySQL8.0
  17. Win7从文件服务器复制文件速度慢问题处理
  18. CCVP 642-446认证介绍
  19. udf,udaf,udtf之间的区别
  20. java url 图片路径_问个URL图片路径问题

热门文章

  1. Windows 如何在cmd命令行中查看、修改、删除与添加环境变量
  2. 【framework】spring3-mvc实例-信息转换
  3. 利用日志审计追踪APT***
  4. Windows与Linux区别3
  5. MyBatis开发重点知识
  6. 2019第十二届“认证杯”数学建模(第二阶段)
  7. matplotlib 设置图形大小时 figsize 与 dpi 的关系
  8. 接口测试 -- 关闭 requests 打开的 file
  9. NetTiers中的一些内置对象及关系
  10. Amazon EC2云端服务器的使用方法