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 ...
随机推荐
- Java中的注解是如何工作的?
自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解.这篇文章中,我将向大家讲述 ...
- Avito Cool Challenge 2018 C - Colorful Bricks
题目大意: 1*n的格子 可以用m种颜色涂色 已知从第2开始到第n个格子 有k个格子与其左边的格子颜色不同 求涂色的方案数 相当于把n个格子分成k+1份 可以递推出分成k+1份的不同的方案数(其实递推 ...
- 第六篇 xpath的用法
使用pycharm debug调试效率会比较慢,因为每次调试都需要向url发送请求,等返回信息,scrapy提供一种方便调试的功能,如下: >>>(third_project) bi ...
- Hive实践(hive0.12)
版本号:cdh5.0.0+hadoop2.3.0+hive0.12 一.原始数据: 1. 本地数据 [root@node33 data]# ll total 12936 -rw-r--r--. 1 r ...
- Flask理论基础(一)加载配置文件
一.修改/新增配置项 1.使用配置文件 app.config.from_pyfile("config.cfg") 如上 config.cfg 可以是任意后缀的文本文件,需要与app ...
- 结对编程UI
GitHub:https://github.com/zsl1996/UI/commits/master 一. 实验内容 这是交付给最终用户的软件,有一定的界面和必要的辅助功能.完 ...
- kubeadm生成的token重新获取
当你的token忘了或者过期,解决办法如下: 1.先获取token #如果过期可先执行此命令kubeadm token create #重新生成token#列出tokenkubeadm token l ...
- Dubbo中有哪些角色?
registry 注册中心. 是用于发布和订阅服务的一个平台.用于替代SOA结构体系框架中的ESB服务总线的. 发布 开发服务端代码完毕后, 将服务信息发布出去. 实现一个服务的公开. 订阅 客户端程 ...
- 多线程中的detach
从 thread 对象分离执行的线程,允许执行独立地持续.一旦线程退出,则释放所有分配的资源.(就是两个线程彼此相互独立) 调用 detach 后, *this 不再占有任何线程. #include ...
- ETL工具-Kattle:查询 HTTP/WebService
发送HTTP POST请求,获取返回内容. 发送HTTP GET请求,获取返回内容,可以从前面获取URL.参数名.参数值 通过Restful获取数据 通过webService获取数据 HTTP ...