【51Nod】1174
第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)
共Q行,對應每一個查詢區間的最大值。Input示例
5 1 7 6 3 1 3 0 1 1 3 3 4Output示例
7 7 3
總感覺ST演算法像區間dp。
程式碼如下:
#include <stdio.h> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define CLR(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f #define LL long long int dp[10011][30]; int n; int num[10011]; void RMQ() { for (int i = 1 ; i <= n ; i++) dp[i][0] = num[i]; //初始化獨立的數 for (int i = 1 ; (1 << i) <= n ; i++) { for (int j = 1 ; j + (1 << i) - 1 <= n ; j++) { dp[j][i] = max (dp[j][i-1] , dp[j+(1<<(i-1))][i-1]); } } } int main() { scanf ("%d",&n); for (int i = 1 ; i <= n ; i++) scanf ("%d",&num[i]); RMQ(); int Q; int x,y; int l,ans; scanf ("%d",&Q); while (Q--) { scanf ("%d %d",&x,&y); x++ , y++; //我是從1開始存數的,所以都加1 l = log(y-x+1) / log(2.0); ans = max(dp[x][l] , dp[y-(1<<l)+1][l]); printf ("%d\n",ans); } return 0; }
相關推薦
【51Nod】1174
基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題 收藏 關注 給出一個有N個數的序列,編號0 - N - 1。進行Q次查詢,查詢編號i至
【51Nod】1174 區間中最大的數
題意 給出一個有N個數的序列,編號0 - N - 1。進行Q次查詢,查詢編號i至j的所有數中,最大的數是多少。 例如: 1 7 6 3 1。i = 1, j = 3,對應的數為7 6 3,最大的數為
【51NOD】消滅兔子
ret blog break nbsp pla amp 51nod style turn 【算法】貪心 #include<cstdio> #include<algorithm> #include<cstring> #include&l
【51nod】1239 歐拉函數之和
歐拉函數 nbsp blog class post var phi 函數 div 【題意】給定n,求Σφ(i),n<=10^10。 【算法】杜教篩 【題解】 $\sum_{i=1}^{n}(\varphi *I)(i)=\sum_{i=1}^{n}\sum_{d|
【51nod】1238 最小公倍數之和 V3
sum ron 前綴和 body var rac style str 算法 【題意】給定n,求Σi=1~nΣj=1~n lcm(i,j),n<=10^10。 【算法】杜教篩 【題解】 $ans=\sum_{i=1}^{n}\sum_{j=1}^{i}lcm(i,j)$
【51nod】1222 最小公倍數計數 莫比烏斯反演+組合計數
ace using 復雜度 amp nebula names ons 問題 sin 【題意】給定a和b,求滿足a<=lcm(x,y)<=b && x<y的數對(x,y)個數。a,b<=10^11。 【算法】莫比烏斯反演+組合計數 【題
【51nod】1822 序列求和 V5
IT 4 sum air clu npr vector AI prime ostream 題解 我是zz吧 nonprime[i * prime[j]] = 0 = = 還以為是要卡常,卡了半天就是過不掉 我們來說這道題…… 首先,我們考慮一個\(K^2\)做法 \(f_{
【51nod】2026 Gcd and Lcm
truct 處理 main code void freopen cstring pre out 題解 話說LOJ說我今天宜學數論= =看到小迪學了杜教篩去蹭了一波小迪做的題 標解的杜教篩的函數不懂啊,怎麽推的毫無思路= = 所以寫了個復雜度稍微高一點的?? 首先,我們發現f
【51nod】1227 平均最小公倍數
tdi name source n) ++ RF getc 故事 oid 題解 這個故事告訴們數論函數不要往分式上跑,你推不出來 好久沒推式子了這麽明顯的轉化我都忘了= = 首先\(A(n) = \frac{1}{n} \sum_{i = 1}^{n} \frac{i *
【51nod】1251 Fox序列的數量
max return -- push_back 代碼量 復雜度 次數 個數 ace 題解 容斥題 我們枚舉出現次數最多的數出現了K次 然後我們需要計算的序列是所有數字出現個數都不超過K - 1次 我們枚舉不合法的數字的數目j,說明這個排列裏除了我們固定出現K次的數至少有j個
【51nod】1149 Pi的遞推式
names set air Go putc bitset 組合數 == AS 題解 我們把這個函數的遞歸形式畫成一張圖,會發現答案是到每個出度為0的點的路徑的方案數 這個可以用組合數算 記錄一下P[i]為i減幾次PI減到4以內 如果P[i + 1] > P[i],那麽
【51nod】1164 最高的獎勵 V2
LV out for ace pac define ifdef || std 題解 一道比較神奇的二分圖匹配 既然有n個元素,那麽能匹配n個位置,我們把這n個位置找出來,是每個區間從左端點開始找到一個沒有被匹配到的位置作為該點(我們忽略右端點) 然後我們從價值大到小,然後從
【51nod】尤拉函式之和(數論,杜教篩)
文章目錄 題目 分析 一個性質 嘗試遞推 分塊 打表 線性篩尤拉函式 一個性質 線性篩 程式碼 題目 12
【51nod】1779 逆序對統計 狀壓DP
題目傳送門 這題好迷啊,一直都看不懂題目意思……(就不能TMD說的清楚點嗎?) 題目大意:有n個位置和m道題目,第i道題目的權值為i,可以放在第a[i]位上,求最大逆序對數。 看到資料範圍裡n≤2
【51nod】1008 N的階乘 mod P
題解: 這裡用到了同餘定理 (a+b)%m = (a%m + b%m) % m (a*b)%m = (a%m * b%m) % m #include <cstdio> using namespace std; long long Solve(i
【51NOD】 1040-最大公約數之和(尤拉函式)
原題連線 首先補充一個知識點,尤拉函式: 在數論,對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目(φ(1)=1)。此函式以其首名研究者尤拉命名(Euler’s totient function),它又稱為Euler’s totient f
1347 旋轉字串【51NOD】
基準時間限制:1 秒 空間限制:131072 KB 分值: 5 難度:1級演算法題 S[0...n-1]是一個長度為n的字串,定義旋轉函式Left(S)=S[1…n-1]+S[0]
【51nod】---1006 最長公共子序列Lcs(動態規劃&&字串LCS)
題目連結這裡呀 1006 最長公共子序列Lcs 基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題 收藏 關注 給出兩個字串A B,求A與B的最長公共子序列(子序列不要求是連續的)。 比如兩個串為: abcicba abd
【51Nod】1043
基準時間限制:1 秒 空間限制:131072 KB 分值: 20 難度:3級演算法題 收藏 關注 1個長度為2N的數,如果左邊N個數的和 = 右邊N個數的和,那麼
【51Nod】1009
收藏 關注 給定一個十進位制正整數N,寫下從1開始,到N的所有正數,計算出其中出現所有1的個數。 例如:n = 12,包含了5個1。1,10,12共包含3個1,11包含