编辑代码

#include <stdio.h>
#include <stdlib.h>
#define N 100000
#define M 100000

int a[N];//第 i 个数 ai表示第 i个区域的初始波动值
char output[N];

int lrmax(int a[], int l, int r) {//找到区间l-r内 波动值大的前两个按位与,此时结果最大,这两个区域不一定连续
    int max = -1;
    for (int i = l; i <= r; i++) {
        for (int j = i; j <= r; j++) {
            if (i == j) {
                continue;
            }
            int result = a[i] & a[j];
            if (max < result) {
                max = result;
            }
        }
    }
    printf("结果为:%d", max);
    printf("\n");
    return 0;
}

int main() {
    int n, m;
    int opt, l, r, v;
    scanf("%d %d", &n, &m);
    for (int i = 1; i <= n; i++) {//初始波动值
        scanf("%d", &a[i]);
    }
    for (int i = 1; i <= m; i++) {
        scanf("%d %d %d", &opt, &l, &r);
        if (opt == 1) {
            scanf("%d", &v);
            for (int i = l; i <= r; i++) {//区域波动值增加了v
                a[i] += v;
                //printf("**%d ", a[i]);
            }
            //printf("\n");
        }
        else {
            if (l == r) {
                printf("结果为:-1");
                printf("\n");
                continue;
            }
            lrmax(a, l, r);
        }
    }
    return 0;
}