全RE求调(部分分代码)
查看原帖
全RE求调(部分分代码)
1081824
LoveFrieren楼主2024/8/18 23:03

想先试试正数的部分分,用了sta和stb存的st表,基本上都是模板吧,但是不知道为什么re,下载了测试点也找不到问题

代码:

#include<bits/stdc++.h>
using namespace std;
const int M = 1e5 + 10;
const int lgM = log(M) / log(2) + 2;
typedef long long ll;
int n, m, q, a[M], b[M];
int sta[M][lgM], stb[M][lgM];
void init(){
	for(int i = 1; i <= n; ++i)
		sta[i][0] = a[i];
	for(int i = 1; i <= m; ++i)
		stb[i][0] = b[i];
	int t1 = log(n) / log(2);
	for(int j = 1; j <= t1; ++j)
		for(int i = 1; i + (1 << j) - 1 <= n; ++i)
			sta[i][j] = max(sta[i][j - 1], sta[i + (1 << (j - 1))][j - 1]);
	int t2 = log(m) / log(2);
	for(int j = 1; j <= t2; ++j)
		for(int i = 1; i + (1 << j) - 1 <= m; ++i)
			stb[i][j] = min(stb[i][j - 1] , stb[i + (1 << (j - 1))][j - 1]);
}
ll gscore(int l1, int r1, int l2, int r2){
	int loglen1 = log(r1 - l1 + 1) / log(2), loglen2 = log2(r2 - l2 + 1) / log(2);
	ll ma = max(sta[l1][loglen1], sta[r1 - (1 << loglen1) + 1][loglen1]);
	ll mb = min(stb[l2][loglen2], stb[r2 - (1 << loglen2) + 1][loglen2]);
	ll ans = ma * mb;
	return ans;
}
int main(){
	ios::sync_with_stdio(0); cin.tie(0);
//	freopen("P8818_1.in", "r", stdin);
//	freopen("ot.out", "w", stdout);
	cin >> n >> m >> q;
	for(int i = 1; i <= n; ++i)
		cin >> a[i];
	for(int i = 1; i <= m; ++i)
		cin >> b[i];
	init();
	for(int i = 1, l1, l2, r1, r2; i <= q; ++i){
		cin >> l1 >> r1 >> l2 >> r2;
		cout << gscore(l1, r1, l2, r2) << endl;
	}
	return 0;
}
2024/8/18 23:03
加载中...