明显用差分·来统计坐每一段的次数
然后忘开ll喜提70,(;′д`)ゞ
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,int> PII;
int n,m;
ll an;
ll p[100011];
ll a[100011];
ll b[100011];
ll c[100011];
ll df[100011];
ll s[100011];
int main()
{cin>>n>>m;for(int i=0;i<m;i++){cin>>p[i];}for(int i=1;i<=n-1;i++) cin>>a[i]>>b[i]>>c[i];for(int i=0;i<m-1;i++){int l=min(p[i],p[i+1]);int r=max(p[i],p[i+1]);df[r]--;df[l]++;}for(int i=1;i<=n-1;i++){s[i]=s[i-1]+df[i];//cout<<s[i]<<" ";}for(int i=1;i<=n-1;i++){if(a[i]*s[i]<c[i]+b[i]*s[i]){an+=a[i]*s[i];}else an+=c[i]+b[i]*s[i];}cout<<an;
return 0;
}