CF431E Chemistry Experiment
题意:有n个试管,有高度为hi的水银。操作1:将试管x中的水银高度改成y。操作2:将体积为v的水注入试管,求水位的高度?n,q<=1e5。
标程:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+;
int n,q,x,y,h[N],sc,rt,ls[N*],rs[N*],num[N*];
ll sum[N*],v;
void add(int &k,int l,int r,int x,int y)
{
if (!k) k=++sc;
if (l==r) {num[k]+=y;sum[k]+=x*y;return;}
int mid=(l+r)>>;
if (x<=mid) add(ls[k],l,mid,x,y);
else add(rs[k],mid+,r,x,y);
sum[k]=sum[ls[k]]+sum[rs[k]];
num[k]=num[ls[k]]+num[rs[k]];
}
double qry(int k,int l,int r,ll Num,ll Sum)
{
if (!k||l==r) return (double)(v+Sum+sum[k])/(Num+num[k]);
int mid=(l+r)>>;
if ((ll)(mid+)*(Num+num[ls[k]])-(Sum+sum[ls[k]])>=v) return qry(ls[k],l,mid,Num,Sum);
else return qry(rs[k],mid+,r,Num+num[ls[k]],Sum+sum[ls[k]]);
}
int main()
{
scanf("%d%d",&n,&q);
for (int i=;i<=n;i++) scanf("%d",&h[i]),add(rt,,1e9,h[i],);
while (q--)
{
int op;scanf("%d",&op);
if (op==)
{
scanf("%d%d",&x,&y);
add(rt,,1e9,h[x],-);
add(rt,,1e9,y,);
h[x]=y;
}else {
scanf("%lld",&v);
printf("%.8lf\n",qry(rt,,1e9,,));
}
}
return ;
}
易错点:1.写得太急又忘记ll了啊。
2.注意把水银和水分清楚啊。
题解:线段树+二分
考虑二分高度hi,当hi*num(高度<hi的试管数量)-sum(这些试管中已有水银的高度之和)<v,那么说明高度太小,还可以再倒水。放在线段树上也是一样的哈。注意是要小数,但是给你的所有高度都是整数,那么就统计水盖过的最上一个试管高度,从而计算出实际的h。
权值线段树维护某高度区间的水银数量,以及这些水银高度的和。
CF431E Chemistry Experiment的更多相关文章
- Codeforces 431E Chemistry Experiment 线段树 + 二分
Chemistry Experiment 维护一个权值线段树,然后二分答案. #include<bits/stdc++.h> #define LL long long #define LD ...
- CF数据结构练习
1. CF 438D The Child and Sequence 大意: n元素序列, m个操作: 1,询问区间和. 2,区间对m取模. 3,单点修改 维护最大值, 取模时暴力对所有>m的数取 ...
- Codeforces Round #312 (Div. 2) C. Amr and Chemistry 暴力
C. Amr and Chemistry Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/558/ ...
- Codeforces Round #312 (Div. 2) C.Amr and Chemistry
Amr loves Chemistry, and specially doing experiments. He is preparing for a new interesting experime ...
- Codeforces 558C Amr and Chemistry 暴力 - -
点击打开链接 Amr and Chemistry time limit per test 1 second memory limit per test 256 megabytes input stan ...
- CF 558 C. Amr and Chemistry 暴力+二进制
链接:http://codeforces.com/problemset/problem/558/C C. Amr and Chemistry time limit per test 1 second ...
- Amr and Chemistry
C. Amr and Chemistry time limit per test 1 second memory limit per test 256 megabytes input standard ...
- codeforces 558C C. Amr and Chemistry(bfs)
题目链接: C. Amr and Chemistry time limit per test 1 second memory limit per test 256 megabytes input st ...
- C. Amr and Chemistry(Codeforces Round #312 (Div. 2) 二进制+暴力)
C. Amr and Chemistry time limit per test 1 second memory limit per test 256 megabytes input standard ...
随机推荐
- [已解决]windows安装docker的问题
windows下载安装docker出现的问题 进入powershell后输入docker --version报错: could not read CA certificate "C:\\Us ...
- hdu 3123 2009 Asia Wuhan Regional Contest Online
以为有啥牛逼定理,没推出来,随便写写就A了----题非常水,可是wa了一次 n>=m 则n!==0 注意的一点,最后 看我的凝视 #include <cstdio> #includ ...
- mysql数据库 --数据类型、约束条件
今日内容 表的详细使用 1.创建表的完成语法 2.字段类型 整型.浮点型.字符类型.日期类型.枚举与集合类型 3.约束条件 primary key.unique.not null.default 一. ...
- PL SQL 存储过程 SQL SERVER创建存储过程及调用,Oracle创建存储过程及调用
Oracle使用存储过程实例: 例1: //查出表字段赋值给存储过程变量 create proc proc_stu @sname varchar(20), //默认是输入参数(input),另外还有两 ...
- kubeadm部署一个Kubernetes集群
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具.这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 $ kubeadm in ...
- look at me
I would bet my life, like I bet my heart我以生命与真心担保That you were the one, baby你就是我的命中注定I've never been ...
- delphi 获得系统目录
利用Api函数,现在我介绍两个Api函数,利用他们就可以轻松简单的获取这些特殊系统目录. Function SHGetSpecialFolderLocation(hwndOwner: HWND; nF ...
- Grafana + Influxdb Android性能监控部署
目录 前言 一.前提准备 二.安装 Grafana 三.安装 Influxdb 四.Grafana 添加 Influxdb 数据源 五.Shell 脚本写入数据到 Influxdb 前言 你是否为了数 ...
- thinkphp 数据库缓存
默认的数据库驱动位于Think\Db\Driver命名空间下面,驱动类必须继承Think\Db类,每个数据库驱动必须要实现的接口方法包括(具体参数可以参考现有的数据库驱动类库): 驱动方法 方法说明 ...
- spark在collect收集数据的时候出现outOfMemoryError:java heap space
spark的collect是action算子,所有最后会以数组的形式返回给driver端,当数据太大的时候就会出现堆内存溢出.OutofMemoryError:java heap space. 在sp ...