P3406 海底高铁 题解
P3406 海底高铁
题解
区间修改可以用差分思想,统计每个点出现次数用前缀和,最后取最小值
#include<bits/stdc++.h>
using namespace std;
const int maxn=100009;
int p[maxn],v[maxn];
long long ans;
int main()
{
int n,m;
scanf("%d %d",&n,&m);
for (int i=1;i<=m;i++)
{
scanf("%d",&p[i]);
}
for (int i=1;i<m;i++)
{
int x,y;
x=min(p[i],p[i+1]);
y=max(p[i],p[i+1]);
v[x]++;//区间修改
v[y]--;
}
for (int i=1;i<=n;i++) v[i]+=v[i-1];//统计每个点到过的次数
for (int i=1;i<n;i++)
{
long long a,b,c;
scanf("%d %d %d",&a,&b,&c);
ans+=min(a*v[i],b*v[i]+c);//对于每次乘车是用纸质还是IC卡
}
printf("%ld",ans);
}
浙公网安备 33010602011771号