显着用差分·来统计坐每一段的次数
然后忘开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;
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |