zoukankan      html  css  js  c++  java
  • POJ 3264 Balanced Lineup RMQ

    回顾一下一些基础算法,Sparse Table有种dp的感觉,写起来有点棘手吧,主要是因为下标的问题,贴一记代码,等下写一个非递归的线段树试试。

    #pragma warning(disable:4996)
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cstdio>
    #include<vector>
    #include<cmath>
    #define maxn 50000
    #define max_logn 20
    using namespace std;
    
    int dmin[maxn+20][max_logn];
    int dmax[maxn+20][max_logn];
    int a[maxn+50];
    int n,m;
    
    int main()
    {
    	while (cin >> n>>m)
    	{
    		for (int i = 1; i <= n; i++) scanf("%d", a + i);
    		for (int i = 1; i <= n; i++) dmin[i][0] =dmax[i][0] = a[i];
    		for (int j = 1; (1<<j) <= n; j++){
    			for (int i = 0; i+(1<<j)-1 <= n; i++){
    				dmin[i][j] = min(dmin[i][j - 1], dmin[i + (1<<(j-1))][j - 1]);
    				dmax[i][j] = max(dmax[i][j - 1], dmax[i + (1<<(j-1))][j - 1]);
    			}
    		}
    		int l, r;
    		for (int i = 0; i < m; i++){
    			scanf("%d%d", &l, &r);
    			int k = 0; int len = r - l + 1;
    			while ((1 << (k+1)) < len)  k++;
    			printf("%d
    ", max(dmax[l][k],dmax[r-(1<<k)+1][k])-min(dmin[l][k], dmin[r - (1 << k) + 1][k]));
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    软件工程结对作业
    软件工程第二次作业
    软件工程第一次作业
    MATLAB安装教程
    实现生成小学四则运算练习题
    结对编程-审查代码
    软件第三次作业
    练习使用Eclipse进行单元测试
    软件工程第一次作业
    Visual Studio Code (vscode)
  • 原文地址:https://www.cnblogs.com/chanme/p/3537418.html
Copyright © 2011-2022 走看看