給乙個有n個整數的序列a1, a2, a3, ..., an,然後有q個提問,每個提問為兩個整數i、j,(i<=j),請你回答,在ai到aj中,最大值是多少。
注意:1 <= n,q <= 100000, ai在int整型表示的範圍內。
input
有多組測試資料。
每組測試資料的第一行為乙個整數n,表示有n個數;
第二行為n個整數,表示a1,a2,..an;
第三行為q,表示q個提問。
接下來有q行,每行兩個數i, j, (i <= j)。
output
每組測試資料先輸出一行"case n:", n從1開始計數;
接下來有q行,每行對應乙個提問,每行只有乙個整數,為ai到aj間的最大值。
sample input
31 3 2
21 2
2 34
1 2 3 4
31 2
2 41 1
sample output
case 1:33
case 2:24
1hint
題目資料已更新。
#include #include #include using namespace std;
#define n 400005
int a[n],sum[n];
void build(int l,int r,int rt)
int mid=(l+r)/2;
build(l,mid,2*rt);
build(mid+1,r,2*rt+1);
sum[rt]=max(sum[2*rt],sum[2*rt+1]);
}int query(int l1,int r1,int l,int r,int rt)
if(r1>mid)
return max(ret1,ret);
}int main()
build(1,n,1);
int q;
scanf("%d",&q);
int p=q;
while(q--)
int ans=query(a,b,1,n,1);
printf("%d\n",ans);}}
return 0;
}
ps:可還行 hdu I hate it 區間最大值 線段樹
include define maxn 200001 define lson l,mid,rt 1 define rson mid 1,r,rt 1 1 int max maxn 2 int n,m int max int a,int b void pushup int rt 要理解好更新的定義,不...
線段樹 區間修改 最大值
最大值 區間修改 總時間限制 10000ms 單個測試點時間限制 1000ms 記憶體限制 65536kb 描述 在n 1 n 100000 個數a1 an組成的序列上進行m 1 m 100000 次操作,操作有兩種 1 1 lr c 表示把a l 到a r 增加c c的絕對值不超過10000 2 ...
數列區間最大值 線段樹
acwing 1270 time limit 2s memory limit 64mb problem description 輸入一串數字,給你 m 個詢問,每次詢問就給你兩個數字 x,y要求你說出 x 到 y 這段區間內的最大數。input output 輸出共 m 行,每行輸出乙個數。samp...