社区讨论
求助卡常,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 条回复,欢迎继续交流。
正在加载回复...