【BZOJ】【P3570】【DZY Loves Physics I】【题解】【树状数组】

来源:互联网 发布:学编程好找工作吗 编辑:程序博客网 时间:2024/06/05 14:11

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3570

ans=sqrt(2CT+v0^2)

树状数组维护v0 k值

Code:

#include<bits/stdc++.h>#define lowbit(x) (x&-x)using namespace std;const int maxn=1<<17;int n,m,C;int getint(){int res=0;char c=getchar();while(!isdigit(c))c=getchar();while(isdigit(c))res=res*10+c-'0',c=getchar();return res;}int d[maxn];void updata(int x,int f){while(x<maxn)d[x]+=f,x+=lowbit(x);}int kth(int k){    int l=0,r=maxn,cur=0;    while(l<r){    int mid=(l+r)/2;cur+=d[mid];       if(cur>=k)r=mid,cur-=d[mid];    else l=mid+1;    }return l;}int main(){n=getint();C=getint();for(int i=1;i<=n;i++){int x=getint();updata(x,1);getint();getint();}m=getint();while(m--){int op=getint(),x=getint();if(op==0){getint();getint();updata(x,1);}else{int y=getint();int z=kth(y);printf("%.3lf\n",sqrt((double)2*C*x+(double)z*z));}}return 0;}



0 0
原创粉丝点击