http://uoj.ac/problem/29

经过的点集一定是一个包含start的区间,为了经过这个区间内所有点,必须先到达一个区间端点,再到达另一个区间端点,剩余的步数则贪心选区间内最大价值的点。显然决策单调,于是可以分治,用可持久化线段树快速求出区间前k大数之和。

#include"holiday.h"
#include<cstring>
#include<algorithm>
typedef long long i64;
const int N=;
i64 ans=;
int v[N],*vs[N],S,D;
struct node{
node*c[];
int sz;
i64 s;
}ns[N*],*np=ns,*rt[N];
i64 kmx(int L,int R,int x){
node*w1=rt[L],*w2=rt[R+];
i64 sum=;
for(int i=;i>=;--i){
int s=w1->c[]->sz-w2->c[]->sz;
if(s<=x){
x-=s;
sum+=w1->c[]->s-w2->c[]->s;
w1=w1->c[];
w2=w2->c[];
}else{
w1=w1->c[];
w2=w2->c[];
}
}
return sum;
}
node*ins(node*w,int x,int v){
node*u=++np,*u0=u;
for(int i=;i>=;--i){
int d=x>>i&;
u->c[d^]=w->c[d^];
u=u->c[d]=++np;w=w->c[d];
u->sz=w->sz+;
u->s=w->s+v;
}
return u0;
}
void calc1(int L,int R,int l,int r){
if(L>R)return;
int M=L+R>>,m=l,res=D-(S-M)*-(l-S);
i64 mv=-;
for(int i=l;i<=r&&res>=;++i,--res){
i64 v=kmx(M,i,res);
if(v>mv)mv=v,m=i;
}
if(ans<mv)ans=mv;
calc1(L,M-,l,m);
calc1(M+,R,m,r);
}
void calc2(int L,int R,int l,int r){
if(L>R)return;
int M=L+R>>,m=r,res=D-(M-S)*-(S-r);
i64 mv=-;
for(int i=r;i>=l&&res>=;--i,--res){
i64 v=kmx(i,M,res);
if(v>mv)mv=v,m=i;
}
if(ans<mv)ans=mv;
calc2(L,M-,l,m);
calc2(M+,R,m,r);
}
bool cmp(int*a,int*b){
return *a>*b;
}
i64 findMaxAttraction(int n,int start,int d,int attr[]){
rt[n]=ns->c[]=ns->c[]=ns;
memcpy(v,attr,sizeof(int)*n);
for(int i=;i<n;++i)vs[i]=v+i;
std::sort(vs,vs+n,cmp);
for(int i=;i<n;++i)*vs[i]=i;
for(int i=n-;i>=;--i)rt[i]=ins(rt[i+],v[i],attr[i]);
D=d;S=start;
calc1(std::max(,S-d/),S,S,n-);
calc2(S,std::min(n-,S+d/),,S);
return ans;
}
#include"grader.cpp"

uoj#29. 【IOI2014】Holiday的更多相关文章

  1. [UOJ#24]【IOI2014】Rail

    #24. [IOI2014]Rail 台湾有一个连接着岛的东.西两岸的庞大的铁路线.这个铁路线包含有 mm 个区段.这些相连的区段以数字 0,…,m−10,…,m−1 为编号,且编号由西端开始.每一个 ...

  2. UOJ#24. 【IOI2014】Rail 交互题

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ24.html 题解 我们将 C 型车站称为 左括号 '(', D 型车站称为右括号 ')' ,设括号 i 的位置为 p[i ...

  3. uoj #58. 【WC2013】糖果公园(树上莫队算法+修改操作)

    [题目链接] http://uoj.ac/problem/58 [题意] 有一棵树,结点有自己的颜色,若干询问:u,v路径上的获益,并提供修改颜色的操作. 其中获益定义为Vc*W1+Vc*W2+…+V ...

  4. uoj #5. 【NOI2014】动物园 kmp

    #5. [NOI2014]动物园 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/5 Description 近日 ...

  5. UOJ #148. 【NOIP2015】跳石头 二分

    #148. [NOIP2015]跳石头 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/148 Descripti ...

  6. Uoj #131. 【NOI2015】品酒大会 后缀数组,并查集

    #131. [NOI2015]品酒大会 统计 描述 提交 自定义测试 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项, ...

  7. UOJ#7. 【NOI2014】购票 | 线段树 凸包优化DP

    题目链接 UOJ #7 题解 首先这一定是DP!可以写出: \[f[i] = \min_{ancestor\ j} \{f[j] + (d[j] - d[i]) * p[i] + q[i]\}\] 其 ...

  8. UOJ #17. 【NOIP2014】飞扬的小鸟 背包DP

    #17. [NOIP2014]飞扬的小鸟 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4902  Solved: 1879 题目连接 http:// ...

  9. UOJ#130 【NOI2015】荷马史诗 K叉哈夫曼树

    [NOI2015]荷马史诗 链接:http://uoj.ac/problem/130 因为不能有前缀关系,所以单词均为叶子节点,就是K叉哈夫曼树.第一问直接求解,第二问即第二关键字为树的高度. #in ...

随机推荐

  1. Z遮罩层完全覆盖页面

    不要使用absolute定位,用fixed就行.然后 background:rgba(0, 0, 0, 0.5); position:fixed; z-index: 100; left:0; righ ...

  2. 动态规划-----hdu 1024 (区间连续和)

    给定一个长度为n的区间:求m段连续子区间的和 最大值(其中m段子区间互不相交) 思路: dp[i][j]: 前j个元素i个连续区间最大值 (重要 a[j]必须在最后一个区间内) 转移方程:dp[i][ ...

  3. ccf-170902-公共钥匙盒(模拟)

    这是一道典型的模拟题 首先我们把借钥匙和还钥匙切分成两个事件 保存于两个数组中 然后我对还钥匙的活动按照时间发生次序和还得钥匙序号排序,即按照题意对事件发生的次序排序 最后按照时间的进行 一个一个进行 ...

  4. HDU5950 Recursive sequence (矩阵快速幂加速递推) (2016ACM/ICPC亚洲赛区沈阳站 Problem C)

    题目链接:传送门 题目: Recursive sequence Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total ...

  5. C++学习(二十五)(C语言部分)之 结构体2

    基本概述: int double char; 定义一个学生类型 int Student 姓名 性别 年龄 简单地说 结构体是一个可以包含不同类型的结构,他是一个自定义的类型. struct 结构体标识 ...

  6. 静态布局、自适应布局、流式布局、响应式布局、弹性布局简析、BFC

    静态布局:给页面元素设置固定的宽度和高度,单位用px,当窗口缩小,会出现滚动条,拉动滚动条显示被遮挡内容.针对不同分辨率的手机端,分别写不同的样式文件.例如:浏览器窗口是1000px,那么最小的宽度是 ...

  7. doc 常用命令

    ★ 查看java环境变量 echo %JAVA_HOME% echo %PATH% echo %CLASSPATH%

  8. 使用VUE搭建tab标签组件

    Vue2.0 多 Tab切换组件简单封装,满足自己简单的功能,可以直接拿去使用! 首先上效果图: 功能简单介绍: 1.支持tab切换 2.支持tab定位 3.支持tab自动化 仿React多Tab实现 ...

  9. goreplay 镜像nginx web app流量

    goreplay 是一个很不错的流量拷贝,复制工具,小巧,支持一些扩展,当然也提供了企业版,企业版 功能更强大,支持二进制协议的分析 备注: 演示使用docker-compose 运行,测试镜像流量到 ...

  10. Big-endian/Little-endian, LSB/MSB

    Least significant byte (LSB) Most significant byte (MSB) Big-endian machines store the most-signific ...