疑惑
查看原帖
疑惑
781159
Lovely_Elaina楼主2023/4/21 23:14

这道题蓝桥杯我记得 a 了,在另一个题库也 a 了,为什么在洛谷 re,吸氧变成了 20tps

#include <iostream>
// #include <bits/stdc++.h>
// #define abs(a) (a<0?-a:a)
#define max(a,b) (a>b?a:b)
// #define min(a,b) (a<b?a:b)
// #define int __int128
#define int long long
#define endl '\n'
using namespace std;
const int N = 1e5+10;

int lg[N],f[N][22];
int n,m,l,r,a[N];

int p[N],t[N],T;

inline void build(int a[]){
    f[1][0] = a[1];
    for(int i = 2; i <= n; i++){
        lg[i] = lg[(i>>1)] + 1;
        f[i][0] = a[i];
    }
    for(int j = 1; j < 18; j++)
        for(int i = 1; i+(1<<j)-1 <= n; i++)
            f[i][j] = max(f[i][j-1],f[i+(1<<j-1)][j-1]);
}

inline int find(int l,int r){
    return max(f[l][lg[r-l+1]],f[r-(1<<lg[r-l+1])+1][lg[r-l+1]]);
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(NULL);

    cin >> n >> m >> T;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        p[i] = t[a[i]^T];
        t[a[i]] = i;
    }
    
    build(p);
    
    for(int i = 1; i <= m; i++){
        cin >> l >> r;
        if(max(f[l][lg[r-l+1]],f[r-(1<<lg[r-l+1])+1][lg[r-l+1]]) >= l)
            cout << "yes\n";
        else cout << "no\n";
    }
    
    return 0;
}
2023/4/21 23:14
加载中...