Balanced Lineup POJ-3264

DP分析

  1. 设A[i]是要求区间最值的数列,F[i, j]表示从第i个数起连续2^j个数中的最大值。(DP的状态)
  2. 初状态是F[i,0]=A[i]
  3. 状态转移方程F[i, j]=max(F[i,j-1], F[i + 2^(j-1),j-1])
void RMQ(int num) //预处理->O(nlogn)
{
for(int j = 1; j < 20; ++j) // 这里j的范围根据具体题目数据定义
for(int i = 1; i <= num; ++i) // num为数组内整数的个数
if(i + (1 << j) - 1 <= num)
{
maxsum[i][j] = max(maxsum[i][j - 1], maxsum[i + (1 << (j - 1))][j - 1]);
minsum[i][j] = min(minsum[i][j - 1], minsum[i + (1 << (j - 1))][j - 1]);
}
}

RMQ算法详解

#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<iostream>
#include<string>
#include<cstring>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long ll; int maxnum[50010][20];
int minnum[50010][20];
int main()
{
int num, n, q, i, j, x, y;
while (~scanf("%d%d", &n, &q))
{
for (i = 1; i <= n; i++)
{
scanf("%d", &num);
maxnum[i][0] = minnum[i][0] = num;
}
//DP转态转移,如下
for (j = 1; (1 << j) <= n; j++)
for (i = 1; i + (1 << j) - 1 <= n; i++) // 预处理
{
maxnum[i][j] = max(maxnum[i][j - 1], maxnum[i + (1 << (j - 1))][j - 1]);
minnum[i][j] = min(minnum[i][j - 1], minnum[i + (1 << (j - 1))][j - 1]);
} while (q--)
{
int ans;
scanf("%d%d", &x, &y);
int z = 0;
while (1 << (z + 1) <= y - x + 1)z++;
ans = max(maxnum[x][z], maxnum[y - (1 << z) + 1][z])//用两个区间中取最大值,两个区间长度相等
- min(minnum[x][z], minnum[y - (1 << z) + 1][z]);
printf("%d\n", ans);
}
}
return 0;
}

RMQPOJ3264的更多相关文章

随机推荐

  1. iframe中video没有全屏按钮

    HTML内联框架元素 <iframe> iframe默认不允许全屏, 如果内嵌了video那么控制条上将不显示全屏按钮, 通过添加allowfullscreen属性可以开启全屏功能. mo ...

  2. 机械臂运动学逆解(Analytical solution)

    计算机器人运动学逆解首先要考虑可解性(solvability),即考虑无解.多解等情况.在机器人工作空间外的目标点显然是无解的.对于多解的情况从下面的例子可以看出平面二杆机械臂(两个关节可以360°旋 ...

  3. Device does not seem to be present [常见错误解决]

    一.故障现象: [root@c1node01 ~]# service network restart Shutting down loopback insterface:                ...

  4. 【转载】systemctl命令完全指南

    Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器. Systemd是一个系统管理守护进程.工具和库的集合,用于取代System V初始进程.Systemd的功能是 ...

  5. golang:常量

    今天写代码的时候才发现,go语言里面的常量不能是数组(例如:[2]byte) 于是想查一下资料搞清楚到底是什么原因导致的,从effective go查到如下介绍: 但是这里也仅仅就是介绍了一下常量类型 ...

  6. [C++]Qt程式异常崩溃处理技巧(Win)

    文章转载来自     http://www.cnblogs.com/lcchuguo/p/5177715.html     作者 lcchuguo https://blog.csdn.net/baid ...

  7. dubbo的服务发现和注册如何实现

    Dubbo通常我们是如何使用的? #================================================================================== ...

  8. hdoj:2070

    Fibbonacci Number Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. MATLAB 显示输出数据的三种方式

    MATLAB 显示输出数据的三种方式 ,转载 https://blog.csdn.net/qq_35318838/article/details/78780412 1.改变数据格式 当数据重复再命令行 ...

  10. 【转】Flask入门之上传文件到服务器

    #Sample.py # coding:utf-8 from flask import Flask,render_template,request,redirect,url_for from werk ...