社区讨论

求助卡常,TLE 50pts

P3793由乃救爷爷参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mlh9kc6j
此快照首次捕获于
2026/02/11 08:00
上周
此快照最后确认于
2026/02/12 15:20
上周
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
namespace GenHelper {
	unsigned z1, z2, z3, z4, b;
	unsigned rand_() {
		b = ((z1 << 6)^z1) >> 13;
		z1 = ((z1 & 4294967294U) << 18)^b;
		b = ((z2 << 2)^z2) >> 27;
		z2 = ((z2 & 4294967288U) << 2)^b;
		b = ((z3 << 13)^z3) >> 21;
		z3 = ((z3 & 4294967280U) << 7)^b;
		b = ((z4 << 3)^z4) >> 12;
		z4 = ((z4 & 4294967168U) << 13)^b;
		return (z1 ^ z2 ^ z3 ^ z4);
	}
}
void srand(unsigned x) {
	using namespace GenHelper;
	z1 = x;
	z2 = (~x) ^ 0x233333333U;
	z3 = x ^ 0x1234598766U;
	z4 = (~x) + 51;
}
int read() {
	using namespace GenHelper;
	int a = rand_() & 32767;
	int b = rand_() & 32767;
	return a * 32768 + b;
}
const int N = 2e7 + 5;
struct node {
	ll x,id;
} a[N];
int ls[N],rs[N];
ll ans;
void paint(int l,int r,int x) {
	if(!x) return ;
	if(l <= a[x].id && a[x].id <= r) ans = max(ans,a[x].x);
	if(a[x].id > r) paint(l,r,ls[x]);
	else paint(l,r,rs[x]);
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);cout.tie(nullptr);
	int n,m,s;
	cin >> n >> m >> s;
	srand(s);
	for(int i = 1;i <= n;i++) a[i].x = read(),a[i].id = i;
	stack <int> st;
	int root = 0;
	for(int i = 1;i <= n;i++) {
		int last = 0;
		while(!st.empty() && a[st.top()].x < a[i].x) {
			last = st.top();
			st.pop();
		}
		if(!st.empty()) rs[st.top()] = i;
		else root = i;
		ls[i] = last;
		st.push(i); 
	}
	ll ANS = 0;
	while(m--) {
		int l,r;
		l = read() % n + 1,r = read() % n + 1;
		if(l > r) swap(l,r);
		ans = LLONG_MIN;
		paint(l,r,root);
		ANS += ans;
	}
	cout << ANS;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...