
解题思路

#include<stdio.h>
#define MAX_N 100005
int a[MAX_N];
int cnt[32];
int main(){
int n,k;
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<32;i++){
cnt[i]=0;
}
for(int i=0;i<k;i++){
int num=a[i];
for(int j=0;j<32;j++){
if(num&(1<<j)){
cnt[j]++;
}
}
}
int max_or=0;
for(int j=0;j<32;j++){
if(cnt[j]>0){
max_or|=(1<<j);
}
}
for(int i=k;i<n;i++){
int remove=a[i-k];
for(int j=0;j<32;j++){
if(remove&(1<<j)){
cnt[j]--;
}
}
int add=a[i];
for(int j=0;j<32;j++){
if(add&(1<<j)){
cnt[j]++;
}
}
int current_or=0;
for(int j=0;j<32;j++){
if(cnt[j]>0){
current_or|=(1<<j);
}
}
if(current_or>max_or){
max_or=current_or;
}
}
printf("%d\n",max_or);
return 0;
}