BZOJ3570 : DZY Loves Physics I

考虑两个质量均为m,速度分别v1、v2的小球发生完全弹性碰撞的影响:

由动能守恒得:

$\frac{1}{2}mv_1^2+\frac{1}{2}mv_2^2=\frac{1}{2}mv_1'^2+\frac{1}{2}mv_2'^2$
$v_1^2+v_2^2=v_1'^2+v_2'^2$

由动量守恒得:

$mv_1+mv_2=mv_1'+mv_2'$
$v_1+v_2=v_1'+v_2'$
$v_1^2+v_2^2+2v_1v_2=v_1'^2+v_2'^2+2v_1'v_2'$

所以

$v_1v_2=v_1'v_2'$
$v_1'=v_2$
$v_2'=v_1$

结论:两个质量相同的小球发生完全弹性碰撞后交换速度。

 

由于询问的是第k小的速率,并没有要求是哪个小球,所以可以视为小球并没有发生碰撞,而是直接按原速度穿过去,所以直接计算出每个小球在t时刻的速度就可以了。

 

现在考虑怎么求速度:

每一时刻加速度$av=C$

而加速度可以看做是速度函数的导数,

设$f(x)$为x时刻的速度,$f(0)=v$,$f(x)f'(x)=C$

解得

$f(x)=\sqrt{2Cx+v^2}$

 

因为在t时刻,影响最终速度排名的只有初速度v,所以只需要用数据结构维护v的顺序就可以了。

时间复杂度$O((n+q)\log n)$

 

 

#include<cstdio>
#include<cmath>
#define N 200010
using namespace std;
typedef long long ll;
const double A=0.8;
int n,c,x,y,z,size[N],son[N][2],val[N],f[N],tot,root,data[N],id[N],cnt;
int ins(int x,int p){size[x]++;int b=p>=val[x];if(!son[x][b]){son[x][b]=++tot;f[tot]=x;size[tot]=1;val[tot]=p;return tot;}else return ins(son[x][b],p);
}
void dfs(int x){if(son[x][0])dfs(son[x][0]);data[++cnt]=val[x];id[cnt]=x;if(son[x][1])dfs(son[x][1]);
}
int build(int fa,int l,int r){int mid=(l+r)>>1,x=id[mid];f[x]=fa;son[x][0]=son[x][1]=0;size[x]=1;val[x]=data[mid];if(l==r)return x;if(l<mid)size[x]+=size[son[x][0]=build(x,l,mid-1)];if(r>mid)size[x]+=size[son[x][1]=build(x,mid+1,r)];return x;
}
inline int rebuild(int x){cnt=0;dfs(x);return build(f[x],1,cnt);
}
inline void insert(int p){if(!root){root=tot=size[1]=1;val[1]=p;return;}int x=ins(root,p);int deep=0;int z=x;while(f[z])z=f[z],deep++;if(deep<log(tot)/log(1/A))return;while((double)size[son[x][0]]<A*size[x]&&(double)size[son[x][1]]<A*size[x])x=f[x];if(!x)return;if(x==root){root=rebuild(x);return;}int y=f[x],b=son[y][1]==x,now=rebuild(x);son[y][b]=now;
}
inline int kth(int k){int x=root,sum;while(1){sum=size[son[x][0]]+1;if(k==sum)return val[x];if(k<sum)x=son[x][0];else k-=sum,x=son[x][1];}
}
inline void read(int&a){char c;bool f=0;a=0;while(!((((c=getchar())>='0')&&(c<='9'))||(c=='-')));if(c!='-')a=c-'0';else f=1;while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';if(f)a=-a;
}
int main(){read(n);read(c);while(n--)read(x),read(y),read(z),insert(x);read(n);while(n--){read(x);if(x)read(y),read(z),z=kth(z),printf("%.3f\n",sqrt(2*(ll)c*(ll)y+(ll)z*(ll)z));else read(x),read(y),read(y),insert(x);}return 0;
}

 

  

 

转载于:https://www.cnblogs.com/clrs97/p/4403245.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库---主键约束

1、设置主键约束(1)、方式一&#xff1a;创建表时&#xff0c;在字段在描述处声明指定字段为主键&#xff1b; CREATE TABLE 表名(字段 类型(长度) PRIMARY KEY,字段 类型(长度) );CREATE TABLE STUDENT(STU_ID INT PAIMARY KEY,STU_NAME VARCHAR(255) );(2)、方式二&#xff1…

关于VS2010帮助文档的使用和VC6.0在Win7 64位下的使用

由于购置了新的电脑&#xff0c;安装的是Win7 64位的操作系统&#xff0c;这两天我在重新安装编程环境的时候遇到一些问题&#xff0c;现在都解决掉了&#xff0c;分享出来以供需要的人参考。 一、以前使用的是VS2008&#xff0c;从VC6到2008这么多年了一只使用的MSDN是带索引的…

数据库---聚合查询

聚合查询&#xff1a;纵向查询&#xff0c;它是对一列的值进行计算&#xff0c;然后返回一个单一的值&#xff1b;另外聚合查询是忽略空值。 count&#xff1a;统计指定列不为NULL的记录行数&#xff1b;sum&#xff1a;计算指定列的数值和&#xff0c;如果指定列类型不是数…

【记忆法】心智绘图

心智绘图方法 1.提出具体、明确的记忆任务(以30min为单位) 记忆25min休息5min2.及时复习&#xff0c;减少遗忘(记忆关键字) 看到关键词能够回想起全部的内容。看到关键词能够产生生动的图像。3.平时多背诵 有时间多记一些小东西、小片段4.复述和再现 听到或看到什么好的故事要及…

数据库---分组查询

一、分组查询&#xff1a;指使用group by字句对查询信息进行分组。格式&#xff1a; SELECT 字段1,字段2... FROM 表名 GROUP BY 分组字段 HAVING 分组条件; 分组操作中的having子语句&#xff0c;是用于在分组后对数据进行过滤的&#xff0c;作用类似于where条件。 1、having与…

centos安装coreseek

安装依赖 yum install make gcc g gcc-c libtool autoconf automake imake mysql-devel libxml2-devel expat-devel 下载coreseek 4.1 $ wget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gz $ tar xzvf coreseek-4.1-beta.tar.gz $ cd coreseek-4.1-beta…

HTML---HTML简介

1、HTML简介&#xff1a;*什么事HTML&#xff1f; -HypperText Markup Language&#xff1a;超文本标记语言&#xff0c;网页语言。**超文本&#xff1a;超出文本的范畴&#xff0c;使用HTML可以轻松实现简单操作。**标记&#xff1a;HTML所有的操作都是通过标记实现的&…

谷歌Android各版本的代号变迁

简单回顾下Android发展历程2003年10月&#xff0c;Andy Rubin&#xff08;安迪鲁宾&#xff09;等人创建Android公司&#xff0c;并组建Android团队。2005年8月17日&#xff0c;Google低调收购了成立仅22个月的高科技企业Android及其团队。安迪鲁宾成为Google公司工程部副总裁&…

HTMLL---HTML中常用标签(文字、注释标签)

1、文字标签和注释标签*文字标签和注释标签- <font></font>-属性* size:文字的大小&#xff0c;取值范围1-7&#xff0c;超出7默认为7* color:文字的颜色-两种表示方式**英文单词&#xff1a; red, green, blue, black, white, yellow, gray**使用十六进制数表示&a…

Map.Entry

如何简便的遍历Map 你是否已经对每次从Map中取得关键字然后再取得相应的值感觉厌倦&#xff1f; 使用JDK5的增强for循环&#xff0c;来遍历Map,简单多了&#xff0c;比Map.Entry还方便。 看代码&#xff1a; Java代码 for (String key : map.keySet()) { System.out.pri…

HTML---HTML中常用的标签(标题,水平,特殊标签)

1、标题标签、水平标签和特殊字符*标题标签- <h1>... </h1>、 <h2>... </h2>、 <h3>... </h3>、... <h6>... </h6>-特点&#xff1a;从h1到h6字体由大到小、同时 自动换行。*水平标签- <hr/>-属性** size&#xff1a;水…

图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别...

对于SQL的Join&#xff0c;在学习起来可能是比较乱的。我们知道&#xff0c;SQL的Join语法有很多inner的&#xff0c;有outer的&#xff0c;有left的&#xff0c;有时候&#xff0c;对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章,通过文氏图 Ven…

数据库---四中连接查询(交叉、左连接、右连接、完整查询)

个人博客 &#xff1a;https://www.siyuan.run CSDN&#xff1a;https://blog.csdn.net/siyuan 微信小程序&#xff1a;思远Y 1、交叉连接查询 : (基本不适用---得到的是两张表数据的乘积) 语法&#xff1a;SELECT * FROM 表1,表2; PS&#xff1a;与表关系无关 示例&#xff…

如何用C#语言构造蜘蛛程序

"蜘蛛"&#xff08;Spider&#xff09;是Internet上一种很有用的程序&#xff0c;搜索引擎利用蜘蛛程序将Web页面收集到数据库&#xff0c;企业利用蜘蛛程序监视竞争对手的网站并跟踪变动&#xff0c;个人用户用蜘蛛程序下载Web页面以便脱机使用&#xff0c;开发者利…

数据库---练习题(45道)

准备工作 CREATE DATABASE STUDENTS; CREATE TABLE STUDENT( SNO VARCHAR(32) PRIMARY KEY NOT NULL, SNAME VARCHAR(32) NOT NULL, SSEX VARCHAR(32) NOT NULL, SBIRTHDAY DATETIME, CLASS VARCHAR(20) ); CREATE TABLE COURSE( CNO VARCHAR(20) PRIMARY KEY NOT NULL, CNAM…

LeetCode OJ - Populating Next Right Pointers in Each Node II

题目&#xff1a; Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tree could be any binary tree? Would your previous solution still work? Note: You may only use constant extra space.For example,Given the fo…

数据库---JDBC

1.1 JDBC概述JDBC&#xff08;Java DataBase Connectivity,java数据库连接&#xff09;是一种用于执行SQL语句的Java API。JDBC是Java访问数据库的标准规范&#xff0c;可以为不同的关系型数据库提供统一访问&#xff0c;它由一组用Java语言编写的接口和类组成。 JDBC需要连接驱…

23种设计模式之简单工厂

简单工厂模式描述的是&#xff0c;通过类的继承关系&#xff0c;父类&#xff08;工厂类&#xff09;与子类&#xff08;产品类&#xff09;&#xff0c;调用父类中的方法&#xff0c;实际干活儿的是子类中的方法&#xff1b;封装需求的不确定性&#xff0c;做出通用的编程&…

原生JDBC操作数据库流程

1、class.forName()加载数据驱动 2、DriverManager.getConnection()获取数据库连接对象。 3、根据SQL或sql会话对象&#xff0c;有两种方式Statement、PreparedStatement。 4、执行sql处理结果集&#xff0c;如果有参数就设置参数。 5、关闭结果集&#xff0c;关闭会话&#xf…

verilog HDL 编码风格

1、有意义且有效的名字。 2、同一信号在不同层次应该保持一致。 3、添加有意义的后缀&#xff0c;使信号的有效性更加明确。 4、模块输出寄存器化&#xff0c;使得输出的驱动强度和输入延时是可以预测的。 5、使用括号表明优先级。 6、每一个if都应该有一个else。如果esle没有任…