rt
孩子调了几天人要傻了 qwq
#include<bits/stdc++.h>
#define rei register int
using namespace std;
const int SIZE = 40;
struct GJ{
long long data[SIZE];
inline void clear(){
for(rei i = data[0]; i >= 0; --i) data[i] = 0;
return;
}
inline void output(){
for(rei i = data[0]; i >= 1; --i) putchar(48^data[i]);
return;
}
inline void operator = (const long long &x){
data[0] = 0;
if(x == 0) {data[0] = 1; return;}
for(long long i = x; i; i /= 10) data[++data[0]] = i%10;
return;
}
} ans, tmp, pro;
inline GJ operator * (const GJ &x, const long long &y){
pro.clear();
pro.data[0] = x.data[0];
for(rei i = 1; i <= pro.data[0]; ++i){
pro.data[i] += x.data[i]*y;
if(pro.data[i] < 10) continue;
pro.data[i+1] += pro.data[i]/10;
pro.data[i] %= 10;
}
while(pro.data[pro.data[0]+1]){
pro.data[pro.data[0]+1] += pro.data[pro.data[0]]/10;
pro.data[pro.data[0]] %= 10;
++pro.data[0];
}
while(pro.data[0] > 1 and !pro.data[pro.data[0]]) --pro.data[0];
return pro;
}
inline void operator += (GJ &x, const GJ &y){
x.data[0] = max(x.data[0], y.data[0]);
for(rei i = 1; i <= x.data[0]; ++i){
x.data[i] += y.data[i];
if(x.data[i] < 10) continue;
x.data[i+1] += x.data[i]/10;
x.data[i] %= 10;
}
if(x.data[x.data[0]+1]) ++x.data[0];
return;
}
const int MAXN = 4e7+5;
const long long Mod = 1<<30;
int n, tp, pre[MAXN], l, r, dq[MAXN*2];
long long sum[MAXN];
//struct Deque{
// int l, r
// inline void clear() {l = 4e7+1, r = 4e7; return;}
// inline int front() {return data[l];}
// inline int back() {return data[r];}
// inline void pop_front() {++l; return;}
// inline void pop_back() {--r; return;}
// inline void push_front(int x) {data[--l] = x; return;}
// inline void push_back(int x) {data[++r] = x; return;}
// inline bool empty() {return l > r;}
//} dq;
//deque<int> dq;
inline long long calc(int x){
return -(sum[x]<<1)+sum[pre[x]]; //(sum[x]-sum[y])-(sum[y]-sum[pre[y]])
}
inline int read(){
rei x = 0; int f = 1;
register char c = getchar();
while(!isdigit(c)) {if(c == '-') f = -1; c = getchar();}
while(isdigit(c)) {x = (x<<3)+(x<<1)+(c^48); c = getchar();}
return x*f;
}
inline void input(){
n = read(), tp = read();
if(tp == 0) {for(rei i = 1; i <= n; i++) sum[i] = sum[i-1]+read(); return;}
int x, y, z, m;
x = read(), y = read(), z = read(), sum[1] = read(), sum[2] = read(), m = read();
for(rei i = 3; i <= n; ++i) sum[i] = (x*sum[i-1]+y*sum[i-2]+z)%Mod;
for(rei i = 1, j = 1; i <= m; ++i){
int pi = read(), li = read(), ri = read();
for(; j <= pi; ++j) sum[j] = sum[j-1]+sum[j]%(ri-li+1)+li;
}
return;
}
int main(){
// freopen("P5665_23.in", "r", stdin);
input();
l = 4e7+1, r = 4e7; dq[++r] = 0;
for(rei i = 1; i <= n; ++i){
while(l < r and -calc(dq[r-1]) <= sum[i]) --r;
if(l <= r) pre[i] = dq[r];
while(l <= r and calc(i) >= calc(dq[l])) ++l;
dq[--l] = i;
}
for(rei i = n; i; i = pre[i]){
tmp = sum[i]-sum[pre[i]];
ans += tmp*(sum[i]-sum[pre[i]]);
}
ans.output();
return 0;
}