H
来源:互联网 发布:女同志交友软件 编辑:程序博客网 时间:2024/04/25 08:28
#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace std;const int N=5e4+10,M=(1<<10);int a[N],c[N],n,m;vector<int>g[M];vector<int>id[N];int last[M];int ans[N];//maxn<=10^4,a[i]<=2^10struct node{ int l,r,id; bool operator <(const node&o)const { return r<o.r; }}q[N];void init(){ int tot=0; for (int i=1;i<M;i++) { g[i].clear(); for (int k=i;k;k=((k-1)&i)) { g[i].push_back(k); tot++; } } // printf("###%.3lf\n",(double)tot/M);}int lowbit(int x){return x&-x;}void update(int x,int k){ for (;x;x-=lowbit(x)) c[x]=max(c[x],k);}int query(int x){ int ret=0; for (;x<=n;x+=lowbit(x)) ret=max(ret,c[x]); return ret;}int baoli(int l,int r){ int ret=0; for (int i=l;i<=r;i++) { for (int j=i+1;j<=r;j++) { ret=max(ret,a[i]&a[j]); } } return ret;}int main(){ // freopen("1.in","r",stdin); // freopen("1.out","w",stdout); init(); while (~scanf("%d%d",&n,&m)) { for (int i=1;i<=n;i++) { scanf("%d",&a[i]); } for (int i=0;i<m;i++) { scanf("%d%d",&q[i].l,&q[i].r); id[q[i].r].push_back(i); } memset(c,0,sizeof(c)); memset(last,0,sizeof(last)); for (int i=1;i<=n;i++) { for (int j=0,k=a[i];j<g[k].size();j++) { int t=g[k][j]; if (last[t]) { update(last[t],t); } last[t]=i; } // printf("!!!%d\n",i); for (unsigned int j=0;j<id[i].size();j++) { int k=id[i][j]; ans[k]=query(q[k].l); } } for (int i=0;i<m;i++) { printf("%d\n",ans[i]); // printf("--%d\n",baoli(q[i].l,q[i].r)); } } return 0;}
0 0