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. 将mysql的表导出为excel

     1.在表上右键,选择Table Data Export Wizard,选择想要导出的字段,点击next 2.选择导出文件的路径->csv格式->next 3.点击next 4.打开刚才导 ...

  2. READ–IT: Assessing Readability of Italian Texts with a View to Text Simplification-paper

    https://aclanthology.info/pdf/W/W11/W11-2308.pdf 2 background2000年以前 ----传统可读性准则局限于表面的文本特征,例如the Fle ...

  3. HDU 6345:子串查询(前缀和)

    子串查询 Time Limit: 3500/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Sub ...

  4. python django day 3 页面,自动 跳转,参数传递

    zqxt_views/urls.pypath('', calc_views.index, name='home'), calc/views.pydef index(request): return r ...

  5. ajax解决跨域

    http://www.cnblogs.com/sunxucool/p/3433992.html 为什么会出现跨域跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相 ...

  6. python使用dns轮循检测web服务器是否异常

    我使用的是python2.7,我本来另装了一个python3.6,发现无法安装dnspython,于是只能换回来了 import dns.resolver #这个需要另外下载并安装(下载地址www.d ...

  7. 数据库连接池——Druid

    使用步骤: 1.导包,durid1.0.9 jar包 2.定义配置文件,properties文件,名字任意位置也任意, 3.加载文件 4.获得数据库连接池对象  通过DuridDataSourceFa ...

  8. ViewBag & ViewData

    ViewBag 和ViewData 是ASP.NET MVC 开发当中大家使用很多的传递数据的方法 VB可以称为VD的一块语法糖, VB是使用C# 4.0动态特征, 使得VD也具有动态特性. 下面就是 ...

  9. [转]JDK动态代理

    代理模式         代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间 ...

  10. mongo之 前后台创建索引 --noIndexBuildRetry

    在数据量超大的情形下,任何数据库系统在创建索引时都是一个耗时的大工程.MongoDB也不例外.因此,MongoDB索引的创建有两个选择,一个是前台方式,一个是后台方式.那这两种方式有什么差异呢,在创建 ...