比赛 2026.5.16 评测结果 EEEEEWWWWW
题目名称 序列 最终得分 0
用户昵称 张宸汉 运行时间 2.239 s
代码语言 C++ 内存使用 38.79 MiB
提交时间 2026-05-16 09:59:57
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;

const int MAXN = 1000005;
int st[MAXN][21];
int n, m, type;
ull cnt = 0;
int Log[MAXN];

namespace gen{
	typedef unsigned long long ull;
	ull s,a,b,c,lastans=0;
	ull rand(){
		return s^=(a+b*lastans)%c;
	}
};

// 预处理 log2 数组
void resetLog() {
    Log[1] = 0;
    for(int i = 2; i <= n; i++) {
        Log[i] = Log[i / 2] + 1;
    }
}

//预处理st表 
void reset() {
    for(int k = 1; k <= 20; k++) {
        for(int i = 0; i+(1<<k)-1 <= n; i ++) {
            st[i][k] = min(st[i][k-1], st[i+(1<<(k-1))][k-1]);
        }
    }
}

int main()
{
    freopen("sequence.in","r",stdin);
    freopen("sequence.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    cin >> n >> m >> type;
    for(int i = 0; i <= n; i ++) {
        cin >> st[i][0];
    }
    
    resetLog();
    reset();
    
    if(type == 0) {
        for(int i = 1; i < m; i ++) {
            int l, r, minx;
            cin >> l >> r;
            //查询区间长度 
            int len = r - l + 1;
            int k = Log[len];
            minx = min(st[l][k], st[r-(1<<k)+1][k]);
            cnt += minx;
        }
        cout << cnt;
        
    } else if(type == 0) {
        int l, r;
        l=gen::rand()%n+1;
        r=gen::rand()%n+1;
        if(l>r) std::swap(l,r);
        for(int i = 1; i < m; i ++) {
            int l, r, minx;
            cin >> l >> r;
            //查询区间长度 
            int len = r - l + 1;
            int k = Log[len];
            minx = min(st[l][k], st[r-(1<<k)+1][k]);
            cnt += minx;
        }
        cout << cnt;
    }
    
    fclose(stdin);
    fclose(stdout);
    return 0;
}