关于OJ45题

wpx001 2025-04-27 21:45:41

我的这个代码哪里错误,求调

#include<bits/stdc++.h>
#define int long long
#define stoSHYorz 50001 
using namespace std;
int n,q,v,maxn[stoSHYorz * 4],minn[stoSHYorz * 4],s,t;
void build(int k,int l,int r)
{
	if(l == r)
	{
		cin >> v;
		maxn[k] = minn[k] = v;
		return;
	}
	int mid = (l + r) >> 1;
	build(2 * k,l,mid);
	build(2 * k + 1,mid + 1,r);
	maxn[k] = max(maxn[k * 2],maxn[k * 2 + 1]);
	minn[k] = min(minn[k * 2],minn[k * 2 + 1]);
}
int qmax(int k,int l,int r,int x,int y)
{
	if(l >= x && r <= y) return maxn[k];
	if(l > y || r < x) return -0x3f3f3f3f3f3f3f3f;
	int mid = (l + r) >> 1;
	return max(qmax(k * 2,l,mid,x,y),qmax(k * 2 + 1,mid + 1,r,x,y));
}
int qmin(int k,int l,int r,int x,int y)
{
	if(l >= x && r <= y) return minn[k];
	if(l > y || r < x) return 0x3f3f3f3f3f3f3f3f;
	int mid = (l + r) >> 1;
	return min(qmin(k * 2,l,mid,x,y),qmin(k * 2 + 1,mid + 1,r,x,y));
}
signed main()
{
	freopen("determine.in","r",stdin);
	freopen("determine.out","w",stdout); 
 	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> q;
	build(1,1,n);
	for(int i = 1;i <= q;i++)
	{
		cin >> s >> t;
		cout << qmax(1,1,n,s,t) - qmin(1,1,n,s,t) << '\n';
	}
    return 0;
}

共 9 条回复

wpx001

谢谢!

2024-J-W010

已调

#include <bits/stdc++.h>
#define int long long
#define MAX_N 50110
using namespace std;
const int INF_MIN = LLONG_MIN;
const int INF_MAX = LLONG_MAX;

int n, q, maxn[MAX_N * 4], minn[MAX_N * 4];

void build(int k, int l, int r) {
	if (l == r) {
		int v;
		cin >> v;
		maxn[k] = minn[k] = v;
		return;
	}
	int mid = (l + r) >> 1;
	build(2 * k, l, mid);
	build(2 * k + 1, mid + 1, r);
	maxn[k] = max(maxn[k * 2], maxn[k * 2 + 1]);
	minn[k] = min(minn[k * 2], minn[k * 2 + 1]);
}

int qmax(int k, int l, int r, int x, int y) {
	if (l > y || r < x)
		return INF_MIN;
	if (l >= x && r <= y)
		return maxn[k];
	int mid = (l + r) >> 1;
	return max(qmax(k * 2, l, mid, x, y), qmax(k * 2 + 1, mid + 1, r, x, y));
}

int qmin(int k, int l, int r, int x, int y) {
	if (l > y || r < x)
		return INF_MAX;
	if (l >= x && r <= y)
		return minn[k];
	int mid = (l + r) >> 1;
	return min(qmin(k * 2, l, mid, x, y), qmin(k * 2 + 1, mid + 1, r, x, y));
}

signed main() {
	freopen("determine.in", "r", stdin);
	freopen("determine.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin >> n >> q;
	build(1, 1, n);
	
	for (int i = 1; i <= q; i++) {
		int s, t;
		cin >> s >> t;
		if (s > t)
			swap(s, t);
		
		cout << qmax(1, 1, n, s, t) - qmin(1, 1, n, s, t) << '\n';
	}
	
	return 0;
}
wpx001

“但是改正之后任然 0 pts qwq...”why?

2024-J-W010

不是哥们怎么会用线段树

2024-J-W010

找到了一个,就是没有判断 s > t 的情况,导致答案中会有负数的情况,但是改正之后任然 0 pts qwq...

j27eGU

我只会st表

j27eGU

站长,样例应该没问题

j27eGU

qp

wpx001

感觉样例有问题