题意:
求sigma(1/i)|1<=i<=n
思路:
把询问排个序,然后for一遍就过…
好像有公式
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<queue>
#include<stack>
#include<string>
#include<vector>
#include<map>
#include<set>
using namespace std;
#define lowbit(x) (x&(-x))
typedef long long LL;
const int maxn = 100005;
const int inf=(1<<28)-1;
struct node
{
int Id,Val;
double Ans;
}A[maxn];
int cmp(node u,node v)
{
return u.Val<v.Val;
}
int cmp1(node u,node v)
{
return u.Id<v.Id;
}
int main()
{
int T,Case=0;
scanf("%d",&T);
for(int i=1;i<=T;++i)
{
A[i].Id=i;
scanf("%d",&A[i].Val);
}
sort(A+1,A+T+1,cmp);
double Sum=0;
int now=1;
for(int i=1;i<=A[T].Val;++i)
{
Sum+=(1.0)/(1.0*i);
// printf("%lf -- ",Sum);
while(A[now].Val==i)
{
//printf("%lf\n",Sum);
A[now].Ans=Sum;
now++;
}
}
sort(A+1,A+T+1,cmp1);
for(int i=1;i<=T;++i)
printf("Case %d: %.15lf\n",i,A[i].Ans);
return 0;
}