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. 阿里druid数据库连接池配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  2. 《DSP using MATLAB》Problem 5.2

    代码: %% ---------------------------------------------------------------------------------- %% Output ...

  3. linux----别名

    经常一些命令太长,输入太麻烦,给该命令起个别名,直接执行,简单又方便. 1.查看别名 alias 2.编辑别名 vi ~/.brashrc 3.添加自己的别名 例如:重启网卡 alias netres ...

  4. 【shell编程】之基础知识-基本运算符

    Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 ...

  5. day3 反射与动态代理

    import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

  6. JS从数组中随机取出几个数组元素的方法

    原文链接:http://caibaojian.com/js-get-random-elements-from-array.html js如何从一个数组中随机取出一个元素或者几个元素. 假如数组为· v ...

  7. Centos7安装teamviewer 32/64位

    centos7安装teamviewer teamviewer安装包,自己去官网下吧,不用找了,估摸着就没有Centos7 64位的 所以直接下centos teamviewer 32位那个rpm包吧 ...

  8. MySQL--Checkpoint基础

    ===================================================== Checkpint 分两种:Sharp Checkpoint : 在服务器正常关闭时,将所有 ...

  9. js语言中的新发现和一些总结

    js中定义变量加var和不加var的区别 原创 2016年09月01日 10:17:33 标签: js 3658 这个问题其实我在面试的时候有被问到过,当时我记得我回答的很模糊,面试官看到我好像不太清 ...

  10. Top PG Clustering HA Solutions for PostgreSQL

    转自:https://severalnines.com/blog/top-pg-clustering-ha-solutions-postgresql If your system relies on  ...