样例是5 3 0求调
查看原帖
样例是5 3 0求调
627632
live_cxy110122楼主2024/7/27 19:03
#include<bits/stdc++.h>

using namespace std;

const int N = 1e5 + 7;

int M1[N][63], M2[N][63], q, n;

void st_RMQ1()
{
	int len = log2(n);
	for(int j = 1; j <= len; j++)
		for(int i = 0; i + (1 << j) - 1 <= n; i++)
			M1[i][j] = max(M1[i][j-1], M1[i + (1 << (j - 1))][j - 1]);
}

void st_RMQ2()
{
	int len = log2(n);
	for(int j = 1; j <= len; j++)
		for(int i = 0; i + (1 << j) - 1 <= n; i++)
			M2[i][j] = min(M2[i][j-1], M2[i + (1 << (j - 1))][j - 1]);
}

int RMQ(int l, int r, int M[N][63])
{
	int k = log2(r - l + 1);
	return max(M[l][k], M[r - (1 << k) + 1][k]);
}

int main()
{
    ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);

	cin>>n>>q;
	for(int i = 1; i <= n; i++)
		cin>>M1[i][0], M2[i][0] = M1[i][0];
	st_RMQ1();
	st_RMQ2();
	for(int i = 1; i <= q; i++)
    {
        int a, b;
        cin>>a>>b;
        cout<<RMQ(a, b, M1) - RMQ(a, b, M2)<<'\n';
    }
	return 0;
}
2024/7/27 19:03
加载中...