Codeforces Round #333 Lipshitz Sequence 优先队列
2015-11-26 19:45
435 查看
题目地址:http://codeforces.com/contest/602/problem/D
题意:给定n,q。n代表有n个点,横坐标是1到n。纵坐标由输入给定,之后有q(q<100)个问题求给定的区间[c,d]。求所有子串的斜率绝对值的最大值(子串中取两点)之和。
题解:很容易发现,斜率绝对值的最大值一定是由相邻的两个点提供,每一个相邻两个点的斜率肯定有其管辖的范围(少说是它本身)。则用优先队列找到相邻两个点的斜率的向左管辖范围和向右管辖范围。则这个斜率提供的值为 abs(斜率)*(向左的范围)*(向右的范围)。详见代码。
题意:给定n,q。n代表有n个点,横坐标是1到n。纵坐标由输入给定,之后有q(q<100)个问题求给定的区间[c,d]。求所有子串的斜率绝对值的最大值(子串中取两点)之和。
题解:很容易发现,斜率绝对值的最大值一定是由相邻的两个点提供,每一个相邻两个点的斜率肯定有其管辖的范围(少说是它本身)。则用优先队列找到相邻两个点的斜率的向左管辖范围和向右管辖范围。则这个斜率提供的值为 abs(斜率)*(向左的范围)*(向右的范围)。详见代码。
#include <cstdio> #include <algorithm> #include <cstring> #define N 100005 #define INF 1e9 typedef long long ll; using namespace std; int a ,b ; pair<int,int>q ,tmp; int vl ,vr ; int n,m,startn,endn; int main() { int i; // freopen("in.txt","r",stdin); scanf("%d%d",&n,&m); for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=1;i<n;i++) //最大的abs(斜率)一定出现在相邻的两个点// b[i]=abs(a[i+1]-a[i]); b[0]=b =INF; startn=endn=0; tmp.first=b[0];tmp.second=0; q[endn++]=tmp; for(i=1;i<n;i++) { while(startn<endn&&q[endn-1].first<=b[i])endn--; vl[i]=q[endn-1].second; tmp.first=b[i];tmp.second=i; q[endn++]=tmp; } startn=endn=0; tmp.first=b ;tmp.second=n; q[endn++]=tmp; for(i=n-1;i>=1;i--) { while(startn<endn&&q[endn-1].first<b[i])endn--; //注意这里是小于而不是小于等于,防止和之后的重复计算// vr[i]=q[endn-1].second; tmp.first=b[i];tmp.second=i; q[endn++]=tmp; } int c,d; while(m--) { scanf("%d%d",&c,&d); ll ans=0; for(i=c;i<d;i++) { ans+=(ll)((ll)(i-max(vl[i],c-1))*(min(vr[i],d+1)-i-1)*b[i]); } printf("%I64d\n",ans); } //查看这个斜率的管辖范围。向左可以管辖多远,向右可以管辖多远// return 0; }
相关文章推荐
- 进击的KFC:UI(十)UITableView的编辑和移动
- iOS UI布局-定时器
- org.hibernate.PropertyValueException: not-null property references a null or transient value:
- UIscrollview
- String、StringBuffer与StringBuilder之间区别
- 读书笔记--UI组件三
- Druid
- GenomicRangeQuery
- IOS开发限制UITextField只可以输入数字
- LayoutInflater的inflate方法实例_null,false,true区别_groupview root是什么
- Programatically Adding Ajax Actions to UIComponents
- 给UILabel局部文字添加颜色
- 052 - N-Queens II
- 051 - N-Queens
- Form Data 转换成 Request Palyload
- Storm UI启动却无法显示
- [UIViewController _loadViewFromNibNamed:bundle:] loaded the "One" nib but the view outlet was not se
- 进击的KFC:UI(九)UITableView 表示图
- IOS之UI -- 按钮UIButton的细节
- iOS开发UI篇—实现UItableview控件数据刷新