编译失败玄关求助必关
查看原帖
编译失败玄关求助必关
1062499
zhou2414楼主2025/1/25 16:53

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);
}
2025/1/25 16:53
加载中...