题目链接:https://ac.nowcoder.com/acm/contest/992/B

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

在之前很火的一个动漫《干物妹小埋》中,大家对小埋打游戏喝可乐的印象十分的深刻。

现在欧尼酱将小埋的快乐水全部分开藏在了家具的顶端。

小埋使出空中1080°转身接战术翻滚跳到任一家具上,她相信,只要她翻滚的足够快,欧尼酱就跟不上她。

1.为获取梦幻开局,小埋一套技能可以使她一开始掉落在任一家具上。

2.小埋家的家具按顺序给出,每个家具可跳可不跳,为避开欧尼酱的追击,小埋翻滚到某个家具上面后,只能向前继续翻滚。

3.启动超重力感应系统的小埋不会从较高的家具翻滚到较低的家具上。

4.由于每个家具上的快乐水都有对应的happy值,IQ==250的小埋会选择一条happy值总和最大的路线。

那么,最终小埋将获得的happy值总和是多少呢?

输入描述:

第一行一个整数n(0<n<=200000),表示小埋家的家具数。第二行n个整数,对于每个整数ai, 0<=ai<=10^9,表示第i个家具的高度。第三行n个整数,对于每个整数vi, 0<=vi<=10^9,表示第i个家具上的快乐水的happy值。

输出描述:

一个整数,表示小埋获得的happy值总和。

不知道有多少人和我一样一开始打算把2e5个happy值都离散化然后拆开。比如说,对于第i个家具fur[i],本来只有这一个fur[i],我们现在把这一个i拷贝成happy[i]个fur[i]。那么把每个家具都这样拷贝完之后,答案不就成了最长上升(不严格上升)子序列的长度直接上upper_bound就行了吗?然而数据会炸掉,2e5个1e9复杂度直接上天。(即使把happy值离散化,空间复杂度还是太大,其次离散化之后单个大小顺序虽然没变,但是加起来就不对了。原谅我想着离散化就可以解决了)

所以说改变方向,既然已经想到了最长上升子序列长度,不是还有树状数组这一写法吗。见https://blog.csdn.net/lxt_Lucia/article/details/81206439 对最长上升子序列解法讲的挺好。

求“最长上升子序列长度”时,先给每个物品按照高度排序,每来一个物品i,我们是先找到pos[i](表示物品i最开始的位置)前面的最大值max[i],然后以i结尾的最长上升子序列长度就成了:max[i]+1。现在物品多了一个happy值,就是说有happy[i]个物品i。把max[i]+1替换成max[i]+happy[i]不就符合题意了吗?

上程序:

#include <cstdio>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#include <math.h>
#include <queue>
using namespace std;
typedef long long ll;
const int max_n=2e5+10;
ll A[max_n];
int n;
struct Fur
{ll a,v;int pos;friend bool operator <(const Fur &a,const Fur &b){return a.a==b.a?a.pos<b.pos:a.a<b.a;}
}fur[max_n];
int get_k(int x)
{return x&(-x);
}
void add(int i,ll x)
{while(i<=n){A[i]=max(A[i],x);i=i+get_k(i);}
}
ll query(int i)
{ll res=0;while(i>0){res=max(res,A[i]);i=i-get_k(i);}return res;
}
int main()
{while(scanf("%d",&n)!=EOF){int a,v;memset(A,0,sizeof(A));for(int i=1;i<=n;i++)scanf("%lld",&fur[i].a);for(int i=1;i<=n;i++)scanf("%lld",&fur[i].v);for(int i=1;i<=n;i++) fur[i].pos=i;sort(fur+1,fur+1+n);ll ret=0;for(int i=1;i<=n;i++){ll ma=query(fur[i].pos);ma+=fur[i].v;add(fur[i].pos,ma);ret=max(ret,ma);}printf("%lld\n",ret);}
}

干物妹小埋-树状数组-吉首大学2019年程序设计竞赛相关推荐

  1. 干物妹小埋 树状数组

    链接:https://ac.nowcoder.com/acm/contest/992/B 来源:牛客网 树状数组 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...

  2. 吉首大学2019年程序设计竞赛(重现赛)B——干物妹小埋(树状数组+二分)

    链接:https://ac.nowcoder.com/acm/contest/992/B 来源:牛客网 题目描述 在之前很火的一个动漫<干物妹小埋>中,大家对小埋打游戏喝可乐的印象十分的深 ...

  3. 吉首大学校赛B——干物妹小埋(线段树求最大递增子序列)

    链接:https://ac.nowcoder.com/acm/contest/992/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  4. 吉首大学2019年程序设计竞赛(重现赛) 干物妹小埋(线段树求最长上升子序列)

    链接:https://ac.nowcoder.com/acm/contest/992/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  5. 吉首大学2019年程序设计竞赛(重现赛) B 干物妹小埋

    链接:https://ac.nowcoder.com/acm/contest/992/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  6. 动态区间第k小:树状数组套权值线段树

    所谓树状数组套权值线段树,就是在树状树组上套权值线段树 (逃) 解析 如何解决静态区间第k小? 使用主席树就ok啦 辣么如何解决动态区间第k小嘞- 我们想想主席树为啥不能解决动态区间第k小 因为如果改 ...

  7. 吉首大学2019年程序设计竞赛(重现赛) J 滑稽树下你和我 (递归)

    链接:https://ac.nowcoder.com/acm/contest/992/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  8. 第五讲 树状数组与线段树 【未完结】

    目录 1264. 动态求连续区间和 [树状数组板子题] 1265. 数星星 [树状数组变种] 1270. 数列区间最大值 [线段树 / 区间内求最大值] 1215. 小朋友排队 [树状数组] AcWi ...

  9. BZOJ.2738.矩阵乘法(整体二分 二维树状数组)

    题目链接 BZOJ 洛谷 整体二分.把求序列第K小的树状数组改成二维树状数组就行了. 初始答案区间有点大,离散化一下. 因为这题是一开始给点,之后询问,so可以先处理该区间值在l~mid的修改,再处理 ...

最新文章

  1. Leangoo敏捷项目管理软件 6.3.2
  2. Maltego更新到4.2.4.12374
  3. Angular - - $cacheFactory
  4. 阿里云对象存储OSS与文件存储NAS的区别
  5. mock方法常用框架_基于MOCK对象和JUNIT框架测试DAO
  6. html文件元素体,文档表示HTML文件,文档中的______________被称为元素
  7. linux测试libreoffice,LibreOffice 7.0 开放测试,最终版本将于8月初发布
  8. mysql事件查看器_MYSQL事件查看器使用介绍 | 学步园
  9. 香农编码(C语言实现香农编码,并计算信源熵、平均码长、编码效率)
  10. python安装numpy库教程_Python库之numpy库的安装教程
  11. 数据治理过程中核心数据界定怎么破?
  12. 关于阿里云服务器租用费用的介绍
  13. element click intercepted
  14. 微信小程序实践——实验3视频播放小程序
  15. html中竖线怎么写,HTML如何写出竖线
  16. react class的写法
  17. 腾讯 2022 校招大厂薪资首发,白菜总包接近 40w!
  18. android多个按钮美化,Android开发学习系列(一)——Android按钮圆角美化
  19. 无人驾驶(目前的自动驾驶方案)
  20. springboot初始化项目慢,springboot创建项目慢

热门文章

  1. js解析\遍历json数据中所有的键和值
  2. GoF设计模式——状态模式(C++实现)
  3. java中的BIO基础-4
  4. 画数轴的步骤_中考数学知识点复习:画数轴的步骤
  5. 不一样的VR全景购物,赋能商超和店铺购物升级
  6. Linux vi/vim 文件编辑保存及退出
  7. 支付宝老将樊路远加盟阿里影业 淘票票将成下一个支付宝?
  8. 基于STM32和阿里云的环境检测系统设计
  9. Bugku逆向-游戏过关
  10. 微软Surface Pro笔记本如何设置u盘启动教程