#include<bits/stdc++.h>
using namespace std;
#define int long long
const int LG = 19 , MAXN = 4e5;
int dp[LG + 1][MAXN + 1];
vector<int> lg(MAXN + 1);
void precompute(vector<int> &v)
{
for(int i = 0 ;i < (int)v.size() ; i++)
{
dp[0][i] = v[i];
}
for(int i = 1 ; i < LG ; i++)
{
for(int j = 0 ; j + (1<<i) <= MAXN ; j++)
{
dp[i][j] = max(dp[i - 1][j] , dp[i - 1][j + (1<<(i - 1))]);
}
}
}
int max_query(int l , int r)
{
int f = lg[r - l + 1];
return max(dp[f][l] , dp[f][r - (1<<f) + 1]);
}
signed main()
{
int n , q;
cin>>n>>q;
vector<int> s(2 * n + 1);
for(int i = n ;i < 2 * n ; i++)
{
cin>>s[i];
}
lg[1] = 0;
for(int i = 2 ; i <= MAXN ; i++)
{
lg[i] = lg[i >> 1] + 1;
}
precompute(s);
for(int i = 0 ; i < q ; i++)
{
int t , l , r;
cin>>t>>l>>r;
l+=n-1;
cout<<max_query(l - t , l)<<'\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |