cf799c 树状数组魔改
这题的树状数组是用来维护区间最大值的!非常神奇
第一次见到这种用法,其实和区间求和也没什么差别
/*
树状数组魔改版
有三种方案:选两种c,选两个d,选一个c一个d
前两种方案需要选出符合条件的魅力值最大的物品,枚举的话复杂度n*n,
那么将每件物品按照价格升序排序,同价格时按照魅力值降序排序
枚举每件物品,然后第二件物品就是剩下的钱可以买的魅力值最大的物品
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 100005
struct C{int p,b;}c[maxn];
struct D{int p,b;}d[maxn];
int ans,n,C,D,p,b,totc,totd;
char s[];
int bit[maxn];
void update(int x,int val){
while(x<=maxn-){
bit[x]=max(val,bit[x]);
x+=x&-x;
}
}
int query(int x){
int res=;
while(x){
res=max(res,bit[x]);
x-=x&-x;
}
return res;
}
int main(){
totc=totd=ans=;
scanf("%d%d%d",&n,&C,&D);
for(int i=;i<=n;i++){
scanf("%d%d%s",&b,&p,s);
if(s[]=='C' && p<=C)c[++totc].p=p,c[totc].b=b;
else if(s[]=='D' && p<=D)d[++totd].p=p,d[totd].b=b;
} int max1=-,max2=-;
for(int i=;i<=totc;i++)max1=max(max1,c[i].b);
for(int i=;i<=totd;i++)max2=max(max2,d[i].b);
if(max1+ && max2+) ans=max(ans,max1+max2); memset(bit,,sizeof bit);
for(int i=;i<=totc;i++){
int tmp=query(C-c[i].p);
if(tmp>)
ans=max(ans,c[i].b+tmp); update(c[i].p,c[i].b);
} memset(bit,,sizeof bit);
for(int i=;i<=totd;i++){
int tmp=query(D-d[i].p);
if(tmp>)
ans=max(ans,d[i].b+tmp); update(d[i].p,d[i].b);
}
printf("%d\n",ans);
}
cf799c 树状数组魔改的更多相关文章
- HDU 3333 - Turing Tree (树状数组+离线处理+哈希+贪心)
题意:给一个数组,每次查询输出区间内不重复数字的和. 这是3xian教主的题. 用前缀和的思想可以轻易求得区间的和,但是对于重复数字这点很难处理.在线很难下手,考虑离线处理. 将所有查询区间从右端点由 ...
- 【魔改】树状数组 牛客多校第五场I vcd 几何+阅读理解
https://www.nowcoder.com/acm/contest/143/I vc-dimension 题解:分三种情况,组合数学算一下,其中一种要用树状数组维护 技巧(来自UESTC):1. ...
- poj 3486 A Simple Problem with Integers(树状数组第三种模板改段求段)
/* 树状数组第三种模板(改段求段)不解释! 不明白的点这里:here! */ #include<iostream> #include<cstring> #include< ...
- POJ3468--A Simple Problem with Integers--线段树/树状数组 改段求段
题目描述 You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type ...
- Codeforces 390E Inna and Large Sweet Matrix 树状数组改段求段
题目链接:点击打开链接 题意:给定n*m的二维平面 w个操作 int mp[n][m] = { 0 }; 1.0 (x1,y1) (x2,y2) value for i : x1 to x2 for ...
- HDU 5044 (树链剖分+树状数组+点/边改查)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5044 题目大意:修改链上点,修改链上的边.查询所有点,查询所有边. 解题思路: 2014上海网赛的变 ...
- CodeForces 390E Inna and Large Sweet Matrix(树状数组改段求段)
树状数组仅仅能实现线段树区间改动和区间查询的功能,能够取代不须要lazy tag的线段树.且代码量和常数较小 首先定义一个数组 int c[N]; 并清空 memset(c, 0, sizeof c) ...
- hdu 4970 树状数组 “改段求段”
题意:塔防.给1--n,给出m个塔,每个塔有攻击力,给出k个怪兽的位子和血量,问有几只可以到达n点. 今天刚刚复习了树状数组,就碰到这个题,区间更新.区间求和类型.第三类树状数组可以斩. 注意一下大数 ...
- HDU 1754 I hate it 树状数组维护区间最大值
Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写 ...
随机推荐
- HTML的前世今生
HTML的基础知识扫盲 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 三年前,我就听周围的一些工程师说,python就是一个脚本语言,没啥好学的,学JAVA吧,python能干的J ...
- 4、JDBC-API
访问数据库 /** * 在 java.sql 包中有 3 个接口分别定义了对数据库的调用的不同方式: * * Statement * * PrepatedStatement * * CallableS ...
- Vue.js 开发环境的搭建
1. cnpm install vue-cli(安装vue 脚手架) 2. vue init webpack my-project(my-project:自定义,取一个项目的名字,init 初始化一个 ...
- Spark记录-SparkSql官方文档中文翻译(部分转载)
1 概述(Overview) Spark SQL是Spark的一个组件,用于结构化数据的计算.Spark SQL提供了一个称为DataFrames的编程抽象,DataFrames可以充当分布式SQL查 ...
- 运用Zabbix实现内网服务器状态及局域网状况监控(5) —— Zabbix监控路由器
1. 首先在zabbix服务器端安装snmp工具 [root@zabbix ~]# yum -y install net-snmp-utils net-snmp-libs net-snmp-devel ...
- CodeBblock 常用快捷键 (最常用)
==日常编辑== • 按住Ctrl滚滚轮,代码的字体会随你心意变大变小. • 在编辑区按住右键可拖动代码,省去拉(尤其是横向)滚动条之麻烦:相关设置:Mouse Drag Scrolling. • C ...
- cdqz2017-test11-占卜的准备
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; #defi ...
- unity引用查找插件-ReferenceFinder
简介 这是一个用来查找资源引用和依赖的插件,通过缓存来保存资源间的引用信息,通过树状结构直观的展示. 由于是通过缓存进行实现的,所以在希望的到精确的引用信息时需要刷新缓存.不过由于缓存的存在, ...
- 从数据库中修改zabbix的验证方式 0 内置 1 LDAP 2 HTTP
MariaDB [zabbix]> select authentication_type from config ; +---------------------+ | authenticati ...
- C# 修改编译版本的方法