社区讨论
求条,是由乃救爷爷,我们没救了!(样例不过,笛卡尔树优良码风)
P3793由乃救爷爷参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mlh9kekj
- 此快照首次捕获于
- 2026/02/11 08:00 上周
- 此快照最后确认于
- 2026/02/12 14:55 上周
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
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;
sort(a + 1,a + n + 1,[](node x,node y) {
return x.x < y.x;
});
stack <int> st;
for(int i = 1;i <= n;i++) {
while(!st.empty() && a[st.top()].id > a[i].id) st.pop();
if(!st.empty()) {
int x = st.top();
ls[i] = rs[x];
rs[x] = i;
}
else {
ls[i] = rs[0];
rs[0] = i;
}
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,rs[0]);
ANS += ans;
}
cout << ANS;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...