提交时间:2024-03-31 13:18:11
运行 ID: 27865
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define double long double using namespace std; typedef long long ll; const int maxn=5e4+10; inline ll read(){ ll x=0;short t=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')t=-1;ch=getchar(); }while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,q,a[maxn]; struct ST { int t[maxn][15],Log[maxn]; inline void bd(){ up(i,1,n)t[i][0]=a[i];up(i,2,n)Log[i]=Log[i>>1]+1; up(i,1,Log[n])up(j,1,n-(1<<i)+1)t[j][i]=t[j][i-1]|t[j+(1<<i-1)][i-1]; } inline void bd2(int x,int y){ t[x][0]=y; up(i,1,Log[n])up(j,max(x-(1<<i)+1,1),min(x,n-(1<<i)+1))t[j][i]=t[j][i-1]|t[j+(1<<i-1)][i-1]; } int qry(int l,int r){ int k=Log[r-l+1]; return t[l][k]|t[r-(1<<k)+1][k]; } }T; void slv(){ n=read(),q=read(); up(i,1,n)a[i]=read();T.bd(); while(q--){ int op=read(); if(op==1){ int x=read(),y=read(); a[x]=y;T.bd2(x,y); } else { int K=read(); if(T.qry(1,n)<K)printf("-1\n"); else { int res=n+1; int j=1; up(i,1,n){ if(T.qry(i,n)<K)break; j=max(j,i); while(j<=n&&T.qry(i,j)<K)j++; if(j==n+1)break; res=min(res,j-i+1); if(res==1)break; } printf("%d\n",res); } } } } int main(){ // freopen("beaco.in","r",stdin); // freopen("beaco.out","w",stdout); slv(); //cerr<<clock()*1.0/CLOCKS_PER_SEC<<"s\n"; fclose(stdin); fclose(stdout); return 0; }