1174 區間中最大的數 RMQ
第1行:1個數N,表示序列的長度。(2 <= N <= 10000) 第2 - N + 1行:每行1個數,對應序列中的元素。(0 <= S[i] <= 10^9) 第N + 2行:1個數Q,表示查詢的數量。(2 <= Q <= 10000) 第N + 3 - N + Q + 2行:每行2個數,對應查詢的起始編號i和結束編號j。(0 <= i <= j <= N - 1)Output
共Q行,對應每一個查詢區間的最大值。Input示例
5 1 7 6 3 1 3 0 1 1 3 3 4Output示例
7 7
3
#include<stdio.h> #include<algorithm> using namespace std; int a[200003],dp[50005][20]; int query(int l,int r); int main() { int n,i,j,k,m,x,y,s,e; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=1;i<=n;i++) dp[i][0]=a[i]; for(j=1;(1<<j)<=n;j++) { for(i=1;i+(1<<j)-1<=n;i++) dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]); } scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d%d",&s,&e); printf("%d\n",query(s+1,e+1)); } return 0; } int query(int l,int r) { int k=0; while(1<<(k+1)<=r-l+1) k++; return max(dp[l][k],dp[r-(1<<k)+1][k]); }
相關推薦
1174 區間中最大的數 RMQ
給出一個有N個數的序列,編號0 - N - 1。進行Q次查詢,查詢編號i至j的所有數中,最大的數是多少。 例如: 1 7 6 3 1。i = 1, j = 3,對應的數為7 6 3,最大的數為7
51nod 1174 區間中最大的數 (線段樹+RMQ)
給出一個有N個數的序列,編號0 - N - 1。進行Q次查詢,查詢編號i至j的所有數中,最大的數是多少。 例如: 1 7 6 3 1。i = 1, j = 3,對應的數為7 6 3,最大的數為7。(該問題也被稱為RMQ問題) Input 第1行:1個數N,表
51Nod—1174 區間中最大的數 線段樹模版
using ace pan struct 註意 truct logs mark mar 在大佬們題解的幫助下算是看懂了線段樹吧。。。在這mark下防一手轉頭就忘。 #include<iostream> #include<stdio.h> using
51Nod 1174 區間中最大的數
mod == for log inf bits mem ios swap 給出一個有N個數的序列,編號0 - N - 1。進行Q次查詢,查詢編號i至j的所有數中,最大的數是多少。 例如: 1 7 6 3 1。i = 1, j = 3,對應的數為7 6 3,最大的
1174 區間中最大的數(線段樹)
基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題 收藏 關注 給出一個有N個數的序列,編號0 - N - 1。進行Q次查詢,查詢編號i至j的
1174 . 區間中最大的數
1174 . 區間中最大的數 時間限制:1 秒 空間限制:65536 KB 分值: 0 給出一個有N個數的序列,編號0 - N - 1。進行Q次查詢,查詢編號i至j的所有數中,最大的數是多少。 例如: 1 7 6 3 1。i = 1, j = 3,對應的數為7 6 3
【51Nod】1174 區間中最大的數
題意 給出一個有N個數的序列,編號0 - N - 1。進行Q次查詢,查詢編號i至j的所有數中,最大的數是多少。 例如: 1 7 6 3 1。i = 1, j = 3,對應的數為7 6 3,最大的數為
51nod1174 區間中最大的數
/* 1,線段樹查詢區間最值 2,RMQ */ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; c
iOS中求陣列元素中最大數、最小數以及求和、求平均值
直接上貨 NSArray *testArray = [NSArray arrayWithObjects:@”2.0”, @”2.3”, @”3.0”, @”4.0”, nil]; NSNumber *sum = [testArray valueForKeyPath:@”@sum.floa
51Nod 1062 序列中最大數 打表
有這樣一個序列a: a[0] = 0 a[1] = 1 a[2i] = a[i] a[2i+1] = a[i] + a[i+1] 輸入一個數N,求a[0] - a[n]中最大的數。 a[0] = 0, a[1] = 1, a[2] = 1, a[3] = 2,
Scala List 操作 list中最大數的下標 Vector轉List
1.List操作 take takeRight takeWhile val nums = List(1,1,1,1,4,4,4,4) val left = nums.take(4) //List(1,1,1,1) val right =
51NOD1174 區間最大數 && RMQ問題(ST算法)
pac cst %d for ron 介紹 nlog double sin RMQ問題(區間最值問題Range Minimum/Maximum Query) ST算法 RMQ(Range Minimum/Maximum Query),即區間最值查
POJ 3368 Frequent values(RMQ 求區間出現最多次數的數字的次數)
popu man most add scrip algo main for you 題目鏈接:http://poj.org/problem?id=3368 Description You are given a sequence of n int
RMQ——蒜頭君的玩具娃娃(區間範圍最大值-區間範圍最小值)
mes default bsp lose 格式 baseline 自己的 con using 蒜頭君有 N 個玩具娃娃,編號依次從 1 到 N,每個娃娃都有自己的高度值。蒜頭君想考考聰明的你,蒜頭君會有 Q 次詢問,每次詢問給定兩個整數 A 和 B,求問編號 A 和編號
UVa 11235 Frequent values (RMQ && 區間出現最多次的數的次數)
升序 req display 最大 這一 屬於 分析 size 原來 題意 : 給出一個長度為 n 的不降序序列,並且給出 q 個形如(L, R)的問詢,問你這個區間出現的最多次的數的次數。 分析 : 很自然的想到將區間“縮小”,例如1 1 2 3 3 3就可以變成2
返回數組中的最大數 -freeCodeCamp
pan () nbsp out lar 當前 [] sort 應該 找出多個數組中的最大數 右邊大數組中包含了4個小數組,分別找到每個小數組中的最大值,然後把它們串聯起來,形成一個新數組。 給出的數組如下: largestOfFour([[4, 5, 1, 3
MapReuce中對大數據處理最合適的數據格式是什麽?
reduce 版本支持 詳細 復雜 設置 解壓縮 表示 字符串 保存 本節作為《Hadoop從入門到精通》大型專題的第三章第二節將教大家如何在Mapreduce中使用XML和JSON兩大常見格式,並分析比較最適合Mapreduce大數據處理的數據格式。 在本章的第一章節介紹
FJUT3568 中二病也要敲程式碼(線段樹維護區間連續最值)題解
題意:有一個環,有1~N編號,m次操作,將a位置的值改為b,問你這個環當前最小連續和多少(不能全取也不能不取) 思路:用線段樹維護一個區間最值連續和。我們設出兩個變數Lmin,Rmin,Mmin表示區間左邊最小連續和,右邊最小連續和,區間最小連續和,顯然這可以通過這個方式更新維護。 現在我們已經可以維
求任意一個區間中的最大值,最小值 - 單調棧
連結:https://ac.nowcoder.com/acm/contest/223/C來源:牛客網 題目描述 給出長度為n的序列a,其中第i個元素為 ,定義區間(l,r)的價值為 請你計算出
快速找出一個數組中的最大數、第二大數
#include <stdio.h> int main() { int a[] = {12, 159, 8, 1, 165, 122, 56, 99, 165}; int