记录编号 |
248667 |
评测结果 |
AAAAAAAAAA |
题目名称 |
疯狂动物城 |
最终得分 |
100 |
用户昵称 |
Fancy |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.298 s |
提交时间 |
2016-04-10 19:19:49 |
内存使用 |
2.69 MiB |
显示代码纯文本
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=100001;
const double pi=3.14159265358979323846;
int n,pos[N];
double ans,f,v[N],mx[N];
pair<int,int> a[N];
inline void Change(int x,double y)
{
for(;x<=n;x+=x&(-x)) mx[x]=max(mx[x],y);
}
inline double Quary(int x)
{
double maxx=0;
for(;x;x-=x&(-x)) maxx=max(maxx,mx[x]);
return maxx;
}
int main()
{
freopen("zootopia.in","r",stdin);
freopen("zootopia.out","w",stdout);
scanf("%d",&n);
for(int i=n,x,y;i;i--)
{
scanf("%d%d",&x,&y);
a[i]=make_pair(x,i);
v[i]=pi*x*x*y;
}
sort(a+1,a+n+1);
pos[a[1].second]=1;
for(int i=2;i<=n;i++)
pos[a[i].second]=pos[a[i-1].second]+(a[i].first!=a[i-1].first);
for(int i=1;i<=n;i++)
{
f=Quary(pos[i]-1)+v[i];
Change(pos[i],f);
ans=max(ans,f);
}
printf("%.2lf\n",ans);
}