HDU6047(数学题)
来源:互联网 发布:数据研究中心美国大学 编辑:程序博客网 时间:2024/06/09 13:05
给你两个长度为n的数列,a,b;
然后根据下列公式计算
ai=max{abi−n,abi−n+1,...ai−1}−2n<i<=2n
这里区间最大值要用O(1)的算法,不然会超时,难受
首先要给b排序,这样才能保证和最大
我们将
一部分为
另一部分
比较两部分的最大值赋值给
code:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int a[500005];int b[500005];const int mod=1000000007;int main(){ int n; int i,j,k; int ans; while(scanf("%d",&n)!=EOF) { ans=0; for(i=1;i<=n;i++) { scanf("%d",&a[i]); a[i]=a[i]-i; } for(i=n-1;i>=1;i--) { if(a[i]<a[i+1]) a[i]=a[i+1]; } for(i=1;i<=n;i++) { scanf("%d",&b[i]); } sort(b+1,b+n+1); k=n+1; for(i=1;i<=n;i++) { ans+=a[b[i]]; a[k]=a[b[i]]-k; for(j=k-1;j>=1;j--) { if(a[k]>a[j]) a[j]=a[k]; else break; } /*for(j=1;j<=k;j++) { cout<<"a["<<j<<"] = "<<a[j]<<endl; } cout<<"------------"<<endl;*/ k++; ans%=mod; } cout<<ans<<endl; } return 0;}
阅读全文
1 0
- HDU6047(数学题)
- hdu6047
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- ndk-build
- cartographer源码分析(20)-sensor-data.h
- TensorFlow实现自编码器
- Java多线程系列----Fork/Join框架介绍
- error C2360: initialization of 'j' is skipped by 'case' label
- HDU6047(数学题)
- 85 Maximal Rectangle (最大矩形)
- hdu 6053 莫比乌斯函数(容斥)
- hpuoj 【1287】数组最值 【水题】
- 爬去杭电hdu做题情况
- C# WPF 实现鼠标固定在指定范围内运动
- jQuery EasyUI中的Layout布局(二)
- CS231n课程笔记翻译8:神经网络笔记 part3
- [leetcode] 231. Power of Two