220726 T3 最优化问题 (树状数组)
题目描述
在同学们的努力下, 高匀感受到了 alb 的快乐。
高勺意犹未尽,找来了一个长度为 nn 的序列 a_1,a_2,….,a_na1,a2,….,an 。
她想要删除这个序列中的 kk 个数,然后将剩下的数按下标从小到大排列成一个长度为 n-kn−k 的序列 b_1,b_2,...,b_{n-k}b1,b2,...,bn−k。
高勺定义她的快乐度为 bb 序列中满足 b_i=ibi=i 的数量,即 \sum_{i=1}^{n-k} [b_i=i]∑i=1n−k[bi=i] 。
高勺想知道她的快乐度的最大值为多少。
输入格式
第一行两个整数 n,k,n,k,表示序列的长度和删掉数的个数。
第二行 nn 个整数 a_iai,表示杰哥的序列。
输出格式
输出一个整数,表示 \sum_{i=1}^{n-k} [b_i=i]∑i=1n−k[bi=i] 的最大值
DP暴力的话可以得40~50分。考虑正解:
对于一个数ai+x=i,只有当他前面的数删去x过后才会产生1的贡献,我们将原数列按照数值递增,数值相等时位置递减排序,用c[x]维护删去x个数的最大贡献,加入一个数ax,他要产生贡献的话要删去x-ax个数,查询前缀的最大值并由此转移,我们需要一个单点修改和查询前缀max的数据结构,所以用树状数组。
1 #include <bits/stdc++.h>
2 #define N 500005
3 #define fi first
4 #define se second
5 #define pi pair<int, int>
6 //#define loveGsy
7 using namespace std;
8 int a[N], n, k, ans, c[N];
9 pair<int, int> b[N];
10 void add(int x, int v) {
11 x++;
12 for (; x <= n; x += x & (-x)) c[x] = max(c[x], v);
13 }
14 int query(int x) {
15 x++;
16 int s = 0;
17 for (; x; x -= x & (-x)) s = max(s, c[x]);
18 return s;
19 }
20 void solve(int x) {
21 if (a[x] > x) return ;
22 int res = query(x - a[x]) + 1;//从前缀转移
23 add(x - a[x], res);
24 if (x - a[x] <= k && a[x] <= n - k) ans = max(ans, res);
25 }
26 bool cmp(pi a, pi b) {
27 return (a.fi ^ b.fi) ? a.fi < b.fi : a.se > b.se;
28 }
29 int main() {
30 #ifdef loveGsy
31 freopen("tree.in", "r", stdin);
32 freopen("tree.out", "w", stdout);
33 #endif
34 scanf("%d %d", &n, &k);
35 for (int i = 1; i <= n; i++) {
36 scanf("%d", a + i);
37 b[i] = make_pair(a[i], i);
38 }
39 sort(b + 1, b + n + 1, cmp);
40 for (int i = 1; i <= n; i++) solve(b[i].second);
41 printf("%d\n", ans);
42 return 0;
43 }
220726 T3 最优化问题 (树状数组)的更多相关文章
- 2016 10 28考试 dp 乱搞 树状数组
2016 10 28 考试 时间 7:50 AM to 11:15 AM 下载链接: 试题 考试包 这次考试对自己的表现非常不满意!! T1看出来是dp题目,但是在考试过程中并没有推出转移方程,考虑了 ...
- 模拟赛 T3 DFS序+树状数组+树链的并+点权/边权技巧
题意:给定一颗树,有 $m$ 次操作. 操作 0 :向集合 $S$ 中加入一条路径 $(p,q)$,权值为 $v$ 操作 1 :给定一个点集 $T$,求 $T$ 的并集与 $S$ 中路径含交集的权和. ...
- 【树状数组】BZOJ3132 上帝造题的七分钟
3132: 上帝造题的七分钟 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1004 Solved: 445[Submit][Status][Dis ...
- Gym102082 G-What Goes Up Must Come Down(树状数组)
Several cards with numbers printed on them are lined up on the table. We’d like to change their orde ...
- 2018牛客网暑期ACM多校训练营(第一场)J Different Integers(树状数组)
题意 给出一串数字以及q次查询,每次查询l,r],要求求出[1,l]和[r,n]的所有不相同的数字个数. 分析 先对数组进行倍增,变为两倍长,然后查询就变成一个完整的区间.离线处理,按r从小到大排序, ...
- hdu5293 lca+dp+树状数组+时间戳
题意是给了 n 个点的树,会有m条链条 链接两个点,计算出他们没有公共点的最大价值, 公共点时这样计算的只要在他们 lca 这条链上有公共点的就说明他们相交 dp[i]为这个点包含的子树所能得到的最 ...
- 洛谷P3368 树状数组2 树状数组+差分
正解:树状数组+差分 解题报告: 戳我! 不得不说灵巧真滴是越来越弱了...连模板题都要放上来了QAQ 因为今天考试的T3正解要用到树状数组这才惊觉树状数组掌握得太太太太差了...之前一直靠线段树续着 ...
- 二维树状数组+差分【p4514】上帝造题的七分钟
Description "第一分钟,X说,要有矩阵,于是便有了一个里面写满了\(0\)的\(n\times m\)矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为\((a,b)\),右 ...
- 【bzoj4889】[Tjoi2017]不勤劳的图书管理员 树状数组+分块+二分
题目描述(转自洛谷) 加里敦大学有个帝国图书馆,小豆是图书馆阅览室的一个书籍管理员.他的任务是把书排成有序的,所以无序的书让他产生厌烦,两本乱序的书会让小豆产生这两本书页数的和的厌烦度.现在有n本被打 ...
随机推荐
- 西文字符与中文GBK编码的区别
一般来讲二者读取的时候西文字符的数值是正,而中文字符的数值是负的,此时读取的是中文字符的前一半,需要再读取一个char类型的数据,在大多数运行环境下这个规则都是用. ps:转自算法竞赛的笔记,要注意在 ...
- ExpressionChangedAfterItHasBeenCheckedError详细解释
一个angular组件,他的生命周期是这样的 update bound properties for all child components/directives call ngOnInit, On ...
- Ubu18远程登录密匙设置
Ubu18设置远程密匙登录 相关文件 /etc/ssh/sshd_config 注意vscode使用博客园插件需要进行端口转发,在vscode端口处设置41385 本地生成密匙,任选一种,这里只介绍第 ...
- The Art of Code
目录 1. Polyglot 2. Palin 3. Others 1. Polyglot 2. Palin 3. Others
- python获取线程返回值
python获取线程返回值 前言 工作中的需求 将前端传过来的字符串信息通过算法转换成语音,并将语音文件返回回去 由于算法不是我写的,只需要调用即可,但是算法执行速度相当缓慢 我的优化思路是,将前端的 ...
- 使用Django2.0.4集成钉钉第三方扫码登录
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_124 钉钉作为阿里旗下的一款免费移动通讯软件,受众群体越来越多,这里我们使用Django来集成一下钉钉的三方账号登录,首先注册钉钉 ...
- GDB技巧:使用终端界面模式
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 简 ...
- Sphere类定义
这个类是球体,也就是一会要显示的球体了.这个类继承于Geometrics类,并实现了自己的碰撞检测,碰撞原理,书上也说的很清楚了啊,大家多看.然后对照代码就明白了. 类定义: #pragma once ...
- linux设置系统环境变量的天坑
在设置系统环境变量,也就是 .bash_profile 或者 /etc/proflie 或者 .bashrc 中把path写错或者是把设置系统环境变量的格式写错! 会 导致 系统无法进入.登录无限循环 ...
- docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】
一.前言 redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群. redis有两种高可用的方案: High availability with Re ...