rt,第一次做这种生成随机数的题,总是编译失败不到啥回事
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define dd double
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;
}
void write(ll x){
if(x<0){
x=-x;
putchar('-');
}
if(x>9){
write(x/10);
}
putchar(x%10+'0');
}
const ll N=20000009;
ll a[N];
ll n,m,s;
ll lg[N];
ll st[N][30];
unsigned ll ans;
void init(){
lg[0]=-1;
for(int i=1;i<=n;i++){
lg[i]=lg[i/2]+1;
}
for(int i=n;i>=1;i--){
for(int j=0;i+(1<<(j-1))<=n;j++){
if(j==0){
st[i][j]=a[i];
}
else{
st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
}
}
}
}
int main(){
scanf("%lld%lld%lld",&n,&m,&s);
srand(s);
for(int i=1;i<=n;i++){
a[i]=read();
}
init();
for(int i=1;i<=m;i++){
ll a=read()%n+1,b=read()%n+1;
if(a>b)swap(a,b);
ll len=b-a+1;
ans+=max(st[a][lg[len]],st[b-(1<<lg[len])+1][lg[len]]);
}
write(ans);
}