APTX博客

  • ACGN
  • Coding
  • DevOps
  • Daily
  • Share
  • Bangumi
APTX Blog
A Moe Blog Set Up By ミズキ
  1. 首页
  2. OI
  3. 正文

#C/C++#数据结构:ST表模板

2018年9月8日 2192点热度 0人点赞 0条评论

简介

ST表用于区间RMQ问题,它可以做到O(nlogn)预处理,O(1)查询最值。相比线段树,更加有利于静态数据的最值问题。主要是利用倍增的思想。

洛谷:P3865

模板

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

const int MAXN = 1e6 + 10;

int Max[MAXN][22];
int Min[MAXN][22];

int n,m;

void QST();
int QueryMax(int ,int );
int QueryMin(int ,int );

int main() {
	scanf("%d%d",&n,&m);
	QST();
	for(int i = 1;i <= m;++i) {
		int l,r;
		scanf("%d%d",&l,&r);
		printf("%d\n",QueryMax(l,r));
	}
	return 0;
}

void QST() {
	for(int i = 1;i <= n;++i) scanf("%d",&Max[i][0]);
	for(int i = 1;i <= n;++i) Min[i][0] = Max[i][0];
	for(int j = 1;j <= 21;++j)
		for(int i = 1;i + (1 << j)- 1 <= n;++i) {
			Max[i][j] = max(Max[i][j - 1],Max[i + (1 << (j - 1))][j - 1]);
			Min[i][j] = min(Min[i][j - 1],Min[i + (1 << (j - 1))][j - 1]);
		}
}

int QueryMax(int l,int r) {
	int k = log2(r - l + 1);
	return max(Max[l][k],Max[r - (1 << k) + 1][k]);
}

int QueryMin(int l,int r) {
	int k = log2(r - l + 1);
	return min(Min[l][k],Min[r - (1 << k) + 1][k]);
}

 

 

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: C/C++ C++ logn 数据结构 模板 洛谷
最后更新:2018年12月1日

神楽坂 みずき

萌萌萌,好萌!

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

神楽坂 みずき

萌萌萌,好萌!

搜索
最新 热点 随机
最新 热点 随机
上岸 Star Divine 现代前端工程师发展方向不完全指北 站点域名变更通知 私たちの居る理由 《サクラノ詩》VI 章 直哉与蓝对话
Windows 10 Enterprise LTSC 2019 OEM 在线激活 寿屋:まちカドまぞく 千代田桃 #动漫#《我的青春恋爱喜剧果然有问题》观后感 Jawbone Jambox Mini蓝牙音响上车指南与刷机 C/C++ 最短路算法Dijkstra算法 + 堆优化模板 Yandex Money塑料实体万事达借记卡评测
标签聚合
动漫 日常 HTML 洛谷 ST C/C++ OI C++
分类
  • ACGN
  • Coding
  • Daily
  • DevOps
  • OI
  • Share

COPYRIGHT © 2017-2022 APTX博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang