Subtask 1 过不去
#include <stdio.h>
const int MAXN = 10000001; // Set a right value according to your solution.
int n, a[MAXN], f[MAXN];
namespace Generator {
#define swap(a,b) a^=b^=a^=b
unsigned long long k1, k2;
int thres;
inline unsigned long long xorShift128Plus() {
unsigned long long k3 = k1, k4 = k2;
k1 = k4, k3 ^= (k3 << 23), k2 = k3 ^ k4 ^ (k3 >> 17) ^ (k4 >> 26);
return k2 + k4;
}
inline void generate() {
for (int i = 1; i <= n; ++i) {
a[i] = xorShift128Plus() % thres;
}
}
} // namespace Generator.
int main() {
int i;
unsigned long long ans(0);
scanf("%d", &n);
scanf("%llu %llu %d", &Generator::k1, &Generator::k2, &Generator::thres);
Generator::generate();
// Now array a[1..n] represents the sequence A in the statement.
f[n]=n;
for(i=n-1;i;--i)
f[i]=a[i]<a[f[i+1]]?i:f[i+1];
for(i=1;i<=n;){
if(i==f[i]){
++i;
continue;
}else{
swap(a[i],a[f[i]]);
i=f[i]+1;
}
}
for(i=1;i<=n;++i)
ans+=1ull*i*a[i];
printf("%llu",ans);
return 0;
}