首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Codeforces Round #483 (Div. 2) D. XOR-pyramid

Codeforces Round #483 (Div. 2) D. XOR-pyramid

作者头像
用户2965768
发布2018-08-30 17:11:55
4900
发布2018-08-30 17:11:55
举报
文章被收录于专栏:wymwym

D. XOR-pyramid

time limit per test

2 seconds

memory limit per test

512 megabytes

input

standard input

output

standard output

For an array bb of length mm we define the function ff as

f(b)={b[1]if m=1f(b[1]⊕b[2],b[2]⊕b[3],…,b[m−1]⊕b[m])otherwise,f(b)={b[1]if m=1f(b[1]⊕b[2],b[2]⊕b[3],…,b[m−1]⊕b[m])otherwise,

where ⊕⊕ is bitwise exclusive OR.

For example, f(1,2,4,8)=f(1⊕2,2⊕4,4⊕8)=f(3,6,12)=f(3⊕6,6⊕12)=f(5,10)=f(5⊕10)=f(15)=15f(1,2,4,8)=f(1⊕2,2⊕4,4⊕8)=f(3,6,12)=f(3⊕6,6⊕12)=f(5,10)=f(5⊕10)=f(15)=15

You are given an array aa and a few queries. Each query is represented as two integers ll and rr. The answer is the maximum value of ff on all continuous subsegments of the array al,al+1,…,aral,al+1,…,ar.

Input

The first line contains a single integer nn (1≤n≤50001≤n≤5000) — the length of aa.

The second line contains nn integers a1,a2,…,ana1,a2,…,an (0≤ai≤230−10≤ai≤230−1) — the elements of the array.

The third line contains a single integer qq (1≤q≤1000001≤q≤100000) — the number of queries.

Each of the next qq lines contains a query represented as two integers ll, rr (1≤l≤r≤n1≤l≤r≤n).

Output

Print qq lines — the answers for the queries.

Examples

input

Copy

3
8 4 1
2
2 3
1 2

output

Copy

5
12

input

Copy

6
1 2 4 8 16 32
4
1 6
2 5
3 4
1 2

output

Copy

60
30
12
3

Note

In first sample in both queries the maximum value of the function is reached on the subsegment that is equal to the whole segment.

In second sample, optimal segment for first query are [3,6][3,6], for second query — [2,5][2,5], for third — [3,4][3,4], for fourth — [1,2][1,2].

给n个数,询问q次,每次询问给出l,r.   [l,r]区间求异或最大值为多少。

与其他语言不同,c语言和c++语言的异或不用X0R;而用‘^’,这在其他语言表示乘方。

此题需要记忆化两次。区间动态规划。

#include <iostream> #define MAX 5005  #define  ll long long using namespace std; ll N,Q; ll a[MAX],dp[MAX][MAX],ans[MAX][MAX]; int main() { std::ios::sync_with_stdio(0);  cin.tie(0); cout.tie(0);  cin>>N; for(ll i=1;i<=N;i++)     {cin>>a[i]; dp[i][i]=a[i]; ans[i][i]=a[i];//类似杨辉三角初始化  } for(ll t=1;t<N;t++)//枚举长度     for(ll i=1;i+t<=N;i++)//枚举开始位置 i+t为结束位置    {       ll j=i+t;       dp[i][j]=dp[i+1][j]^dp[i][j-1];   ans[i][j]=max(dp[i][j],max(ans[i+1][j],ans[i][j-1]));//自己画个矩阵就明白了  }  cin>>Q; while(Q--) { ll l,r; cin>>l>>r; cout<<ans[l][r]<<"\n"; }  return 0; }

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年05月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档