#include<iostream>
using namespace std;
const int N = 100005;
int n;
int dp[N] = {0};
int lowbit(int k)
{
return k&-k;
}
void add(int k,int num)
{
while(k<=n)
{
dp[k] += num;
k += lowbit(k);
}
}
int query(int k)
{
int res = 0;
while(k>0)
{
res += dp[k];
k -= lowbit(k);
}
return res;
}
int main()
{
cin >> n;
for(int i=1; i<=n; ++i)
{
int num; cin >> num;
add(i,num);
}
int q; cin >> q;
while(q--)
{
int a,b; cin >> a >> b;
cout << query(b) - query(a) << endl;
}
return 0;
}
#include<iostream>
#include<cstring>
using namespace std;
const int N = 100005;
int a[N] = {0};
int dp[N] = {0};
int n;
int lowbit(int k)
{
return k&&-k;
}
void init()
{
int y;
memset(dp, 0, sizeof(dp));
for(int i = 1; i <= n; i++)
{
scanf("%d", &y);
a[i] = y;
dp[i] = y;
for(int j = 1; j <lowbit(i); j <<= 1)
dp[i] = dp[i] > dp[i-j] ? dp[i] : dp[i-j];
}
}
void maxn(int x, int y)
{
a[x] = y;
for(int i = x; i <= n; i += lowbit(i))
{
dp[i] = y;
for(int j = 1; j < lowbit(i); j <<= 1)
{
dp[i] = dp[i] > dp[i-j] ? dp[i] : dp[i-j];
}
}
}
void query(int l, int r)
{
int ans = 0;
while(1)
{
ans = ans > a[r] ? ans : a[r];
if(r == l) break;
for(r -= 1; r-l >= lowbit(r); r -= lowbit(r))
ans = ans > dp[r] ? ans : dp[r];
}
cout << ans;
}
int main()
{
cin >> n;
init();
int l,r; cin >> l >> r;
query(l,r);
return 0;
}