Codeforces Round #413 C. Fountains (线段树的创建、查询、更新)
vj题目链接:
https://vjudge.net/contest/235444#problem/F
题意:
有 n 个待建的喷泉,每个的建造代价为pi coins或者pi diamonds(coins 和 diamonds 不可互相兑换),每个喷泉的魅力为bi。问在原有c coins和d diamonds 的情况下,选择两个喷泉,使得在能支付代价的前提下,魅力值最高?如果拥有的钱不足以支付两个喷泉,就输出0,否则输出两个喷泉的最大b值的和。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 using namespace std; 6 int maxn=100010; 7 int tree[2][400010]; 8 int b,p; 9 char ch; 10 void build(int t,int rt,int l,int r)//新建二叉搜索树 11 { 12 if(l==r) 13 { 14 tree[t][rt]=0; 15 return ; 16 } 17 int mid=(l+r)>>1; 18 build(t,rt<<1,l,mid); 19 build(t,(rt<<1)+1,mid+1,r); 20 } 21 int query(int t,int rt,int l,int r,int ql,int qr)//查询二叉搜索树 22 { 23 if(ql<=l&&qr>=r) 24 { 25 return tree[t][rt]; 26 } 27 int mid=(l+r)>>1; 28 int ll=0,rr=0; 29 if(ql<=mid) 30 { 31 ll=query(t,rt<<1,l,mid,ql,qr); 32 } 33 if(qr>mid) 34 { 35 rr=query(t,(rt<<1)+1,mid+1,r,ql,qr); 36 } 37 return max(ll,rr); 38 } 39 void update(int t,int rt,int l,int r,int q,int v)//更新二叉搜索树 40 { 41 if(l==r) 42 { 43 tree[t][rt]=max(tree[t][rt],v); 44 return ; 45 } 46 int mid=(l+r)>>1; 47 if(q<=mid) 48 { 49 update(t,rt<<1,l,mid,q,v); 50 } 51 if(q>mid) 52 { 53 update(t,(rt<<1)+1,mid+1,r,q,v); 54 } 55 tree[t][rt]=max(tree[t][rt<<1],tree[t][(rt<<1)+1]); 56 57 } 58 int main() 59 { 60 int n,c,d; 61 cin>>n>>c>>d; 62 build(0,1,0,c); 63 build(1,1,0,d); 64 int maxc=0,maxd=0; 65 int ans=0; 66 for(int i=0;i<n;i++) 67 { 68 cin>>b>>p>>ch; 69 if(ch=='C') 70 { 71 if(p<=c) 72 { 73 maxc=max(maxc,b); 74 int p1=c-p; 75 int b1=query(0,1,0,c,0,p1); 76 cout<<b1<<endl; 77 if(b1!=0) 78 { 79 ans=max(ans,b1+b); 80 } 81 update(0,1,0,c,p,b); 82 } 83 } 84 else if(ch=='D') 85 { 86 if(p<=d) 87 { 88 maxd=max(maxd,b); 89 int p2=d-p; 90 int b2=query(1,1,0,d,0,p2); 91 if(b2!=0) 92 { 93 ans=max(ans,b2+b); 94 } 95 update(1,1,0,d,p,b); 96 } 97 } 98 } 99 if(maxc&&maxd) 100 ans = max(ans,maxc+maxd); 101 cout<<ans; 102 return 0; 103 }
转载于:https://www.cnblogs.com/1013star/p/9280331.html
Codeforces Round #413 C. Fountains (线段树的创建、查询、更新)相关推荐
- Codeforces 444C DZY Loves Colors 线段树区间更新
// Codeforces 444C DZY Loves Colors 线段树区间更新// 题目链接:// http://codeforces.com/problemset/problem/444/C ...
- 线段树,最大值查询位子(个人模版)
线段树,最大值查询位子: 1 #include<cstdio> 2 #include<climits> 3 #include<algorithm> 4 5 usin ...
- 线段树线段树的创建线段树的查询单节点更新区间更新
目录 线段树 什么是线段树? 线段树的创建 线段树的查询 单节点更新 区间更新 未完待续 线段树 实现问题:常用于求数组区间最小值 时间复杂度:(1).建树复杂度:nlogn.(2).线段树算法复杂度 ...
- 线段树的创建插入查找删除
一.线段树基本概念 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间 ...
- WUST 1255 巧克力(线段树的单点区间更新查询)
1355: 巧克力 Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld Submitted: 190 Accepted ...
- CodeForces - 1557D Ezzat and Grid(线段树+dp)
题目链接:点击查看 题目大意:给出 nnn 个 010101 串,现在问最少需要删掉多少个串,才能使得剩下的串拼起来是连通的 规定两个 010101 串是连通的,当且仅当存在至少一列,在两个串中都为 ...
- CodeForces - 1527E Partition Game(dp+线段树)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,现在需要将其划分成 kkk 段,使得贡献和最小 对于每段区间 [l,r][l,r][l,r] 的贡献为,其中每个数字,其最后一次出现的位置 ...
- codeforces 581B Luxurious Houses(线段树点更新,区间查询)
题目链接: http://codeforces.com/problemset/problem/581/B 题目大意: 给n个不同高度的房子,要求当对于第i个房子来说,他要严格的比后面的房子都高. 思路 ...
- codeforces 85D. Sum of Medians(线段树or分块)
题目链接:codeforces 85D. Sum of Medians 题意: add x 表示向集合中添加x(添加x的时候保证x是第一次被添加入集合) del x 表示从集合中删除x (删除x的时候 ...
最新文章
- Mac 新建unix可执行文件
- haproxy负载均衡_使用haproxy搭建web集群
- 2016宁波计算机程序复赛,宁波第31届中小学生计算机程序设计竞赛复赛试题小学组.PDF...
- Delphi 的信息框相关函数
- 使用ZeroBrane Studio调试OpenResty Lua脚本
- 如何解决js引入混乱_做个笔记,图片如何实现懒加载(LazyLoad按需加载)
- cmake 下载和安装
- 昆仑通态触摸屏如何把参数由触摸屏传递到PLC_S71200与其他PLC/组态软件无线串口通讯(自由口)...
- 利用Python的sympy包求解一元三次方程
- ccf201503-1 ccf 图像旋转-内存限制问题
- Leetcode 第 201 场周赛 (2020 滴滴校招专场)
- 关于Diy51单片机的趣事
- 跨站脚本(XSS)漏洞
- 六大基酒——朗姆酒的喝法
- 菜鸡随笔第二笔:insmod模块时显示已杀死
- (raspberry、bananapi)Archlinux 无法安装yaourt解决办法-----手工编译(不难)(适用于package-query找不到)
- 2021年中国机动车、汽车和新能源汽车保有量及驾驶人和驾驶证业务办理情况分析「图」
- 全球及中国盐酸氟西汀行业行业需求态势与投资战略规划研究报告2022-2028年
- className和classList区别
- 强大的项目管理软件:OmniPlan Pro 4 mac中文版
热门文章
- 用计算机一级考试考的照片要求,2020年全国计算机等级考试报名照片有哪些要求?【附各省标准】...
- 红豆集团推出首家无人服装零售店,跟无人便利店有何不同?
- MPLAB X IDE v6.00_项目属性(Projiect Properties)_无法更改设置
- 蓝牙 - 设备类型设置: Class of Device
- 考研数二第十六讲 不定积分-换元积分和分部积分以及有理函数的积分
- MATLAB归一化且之和为1
- 微聊 仿微信聊天android app 开源
- 计算机二级vb应用,计算机二级VB考试练习题及答案
- C语言求解1000以内的完数
- 新的JAVA基础第一天---数据类型等