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
原创粉丝点击