2 条题解
-
1
#include <bits/stdc++.h> using namespace std; const int N = 2e5+10; int n,m,t; int f[N][21]; int a[N]; inline void read(int &x) { x = 0;int f = 1;char c = getchar(); while(!isdigit(c)) {if(c == '-')f = -1;c = getchar();} while(isdigit(c)) {x = (x<<1)+(x<<3)+(c^48);c = getchar();} } void ST_init() { for(int i=1;i<=n;i++) f[i][0] = a[i]; int t = log(n)/log(2)+1; for(int j=1;j<t;j++) for(int i=1;i<=n-(1<<j)+1;i++) f[i][j] = max(f[i][j-1],f[i+(1<<(j-1))][j-1]); } int query(int l,int r) { int k = log(r-l+1)/log(2); return max(f[l][k],f[r-(1<<k)+1][k]); } int main() { read(n); for(int i=1;i<=n;i++) cin >> a[i]; ST_init(); read(m); while(m--) { int l,r; read(l);read(r); cout << query(l,r) << endl; } return 0; }
-
0
90?
#include<bits/stdc++.h> using namespace std; int a[5100000],n,m,x,y; int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); scanf("%d",&m); for(int i=1;i<=m;i++) { int ans=-999999999; scanf("%d%d",&x,&y); for(int i=x;i<=y;i++)ans=max(ans,a[i]); printf("%d\n",ans); } return 0; }
- 1
信息
- ID
- 601
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 8
- 标签
- 递交数
- 21
- 已通过
- 4
- 上传者