【NOIP2015】推销员
来源:互联网 发布:mac上下载软件必须要 编辑:程序博客网 时间:2024/04/29 12:28
推(chuan)销员
分析
这里主要阐述一下我的分析思路。
看起来挺直观的。
最初的想法,我们枚举每一个最远点mxp的位置,然后对之前的a进行排序。
那么以mxp为最远点,选x个的最大疲劳值为:
这样的复杂度为
但是,我们要尝试发现这道题的特性,来进行时间上的优化。
根据极大化思想,我们要尽可能排除不影响答案的
当
记
当
所以我们得到了决策单调性:对于
接下来,很容易想到用单调队列什么的进行维护。
但怎么尝试都觉得不行……
这时候就一定要跳出来啦。
根据决策单调性这个重要的特点,考虑换一种思考的角度。
假如当前
我们有两种方法:
①在
②在
用两个堆实现即可。
有点意思。
代码
#include <cstdio>#include <cctype>#include <queue>using namespace std;#define rep(i,a,b) for (int i=(a);i<=(b);i++)#define x first#define y second#define mp make_pairtypedef pair<int,int> PII;const int N=131072;int n;int s[N],a[N];int cur,vis[N];priority_queue<PII> qs,qb;int res;inline int rd(void){ int x=0,f=1; char c=getchar(); for (;!isdigit(c);c=getchar()) if (c=='-') f=-1; for (;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;}int main(void){// freopen("a.in","r",stdin);// freopen("a.out","w",stdout); n=rd(); rep(i,1,n) s[i]=rd(); rep(i,1,n) a[i]=rd(); rep(i,1,n) qb.push(mp(2*s[i]+a[i],i)); PII t1,t2; int e1,e2,cs; rep(i,1,n) { while (!qs.empty()) { t1=qs.top(); if (vis[t1.y]) qs.pop(); else break; } while (!qb.empty()) { t2=qb.top(); if (t2.y<cur||vis[t2.y]) qb.pop(); else break; } e1=(!qs.empty()); e2=(!qb.empty()); if (!e1&&e2) cs=2; else if (e1&&!e2) cs=1; else if (e1&&e2) { t1=qs.top(),t2=qb.top(); if (t2.x-2*s[cur]>=t1.x) cs=2; else cs=1; } if (cs==1) { t1=qs.top(); qs.pop(); vis[t1.y]=1; res+=t1.x; } else if (cs==2) { t2=qb.top(); qb.pop(); vis[t2.y]=1; rep(j,cur+1,t2.y) if (!vis[j]) qs.push(mp(a[j],j)); res+=(t2.x-2*s[cur]); cur=t2.y; } printf("%d\n",res); } return 0;}
- [NOIP2015]推销员
- 【NOIP2015】推销员
- NOIP2015 推销员
- Noip2015 普及组 推销员 题解
- [NOIP2015][Vijos1977]推销员(heap)
- |洛谷|NOIP2015|堆|P2672 推销员
- 【NOIP2015普及组T4】推销员-优先队列
- luogu2672推销员-贪心-(noip2015普及t4)
- NOIP2015普及组 —— 推销员(salesman)
- code vs 5126 推销员 NOIP2015 (线段树+贪心)
- 【codevs 5126】[NOIP2015 普及组T4]推销员(贪心)
- 【NOIP2015普及组】 推销员(纪中数据-标准)
- 推销员
- 推销员
- 推销员
- noip2015
- NOIP2015
- NOIp2015P 推销员
- RecyclerView笔记
- service的生命周期
- 关于动态数组
- 51nod 1065 最小正子段和
- 关于scanf
- 【NOIP2015】推销员
- 完美运动框架
- window 10系统更改默认下载的位置
- 203.Segment Tree Modify-线段树的修改(中等题)
- 51nod 1066 Bash游戏
- 博客,第一天
- 51nod 1067 Bash游戏 V2
- 关于Axure+SVN协同工作的术语解释
- SSM搭建-Maven管理SpringMvc框架(23)