hdu 6070 Dirt Ratio 线段树+二分
Dirt Ratio
Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)
Special Judge

Picture from MyICPC
Little Q is a coach, he is now staring at the submission list of a team. You can assume all the problems occurred in the list was solved by the team during the contest. Little Q calculated the team's low ''Dirt Ratio'', felt very angry. He wants to have a talk with them. To make the problem more serious, he wants to choose a continuous subsequence of the list, and then calculate the ''Dirt Ratio'' just based on that subsequence.
Please write a program to find such subsequence having the lowest ''Dirt Ratio''.
In each test case, there is an integer n(1≤n≤60000) in the first line, denoting the length of the submission list.
In the next line, there are n positive integers a1,a2,...,an(1≤ai≤n), denoting the problem ID of each submission.
5
1 2 1 2 3
For every problem, you can assume its final submission is accepted.
官方题解:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstring>
#include<vector>
#include<list>
#include<set>
#include<map>
#include<stdlib.h>
#include<time.h>
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pi (4*atan(1.0))
#define bug(x) cout<<"bug"<<x<<endl;
#define eps 1e-4 const int N=6e4+,M=1e6+,inf=;
const LL INF=1e18+,mod=;
struct is
{
double minn[N<<];
int lazy[N<<];
void pushdown(int pos)
{
if(lazy[pos])
{
minn[pos<<]+=lazy[pos];
minn[pos<<|]+=lazy[pos];
lazy[pos<<|]+=lazy[pos];
lazy[pos<<]+=lazy[pos];
lazy[pos]=;
}
}
void build(int l,int r,int pos,double m)
{
lazy[pos]=;
if(l==r)
{
minn[pos]=m*l;
return;
}
int mid=(l+r)>>;
build(l,mid,pos<<,m);
build(mid+,r,pos<<|,m);
minn[pos]=min(minn[pos<<],minn[pos<<|]);
}
void update(int L,int R,int z,int l,int r,int pos)
{
if(L<=l&&r<=R)
{
minn[pos]+=z;
lazy[pos]+=z;
return;
}
pushdown(pos);
int mid=(l+r)>>;
if(L<=mid)update(L,R,z,l,mid,pos<<);
if(R>mid) update(L,R,z,mid+,r,pos<<|);
minn[pos]=min(minn[pos<<],minn[pos<<|]);
}
double query(int L,int R,int l,int r,int pos)
{
if(L<=l&&r<=R)return minn[pos];
pushdown(pos);
int mid=(l+r)>>;
double ans=;
if(L<=mid)ans=min(ans,query(L,R,l,mid,pos<<));
if(R>mid)ans=min(ans,query(L,R,mid+,r,pos<<|));
return ans;
}
}tree;
int n,pre[N],a[N];
int check(double x)
{
tree.build(,n,,x);
memset(pre,,sizeof(pre));
for(int i=;i<=n;i++)
{
tree.update(pre[a[i]]+,i,,,n,);
double p=tree.query(,i,,n,);
//cout<<i<<" "<<x<<" "<<p<<" "<<x*(i+1)<<endl;
if(p<=x*(i+))return ;
pre[a[i]]=i;
}
return ;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
double s=;
double e=,ans=-;
while(e-s>=eps)
{
double mid=(s+e)/;
if(check(mid))
{
ans=mid;
e=mid;
}
else s=mid;
}
printf("%f\n",ans);
}
return ;
}
hdu 6070 Dirt Ratio 线段树+二分的更多相关文章
- HDU 6070 - Dirt Ratio | 2017 Multi-University Training Contest 4
比赛时会错题意+不知道怎么线段树维护分数- - 思路来自题解 /* HDU 6070 - Dirt Ratio [ 二分,线段树 ] | 2017 Multi-University Training ...
- HDU 6070 Dirt Ratio(分数规划+线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=6070 题意: 找出一个区间,使得(区间内不同数的个数/区间长度)的值最小,并输出该值. 思路: 因为是要求$\f ...
- 2017ACM暑期多校联合训练 - Team 4 1004 HDU 6070 Dirt Ratio (线段树)
题目链接 Problem Description In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the foll ...
- HDU 6070 Dirt Ratio(线段树)
Dirt Ratio Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)Tot ...
- hdu 6070 Dirt Ratio
题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6070 (2017 Multi-University Training Contest - Team ...
- hdu 5700区间交(线段树)
区间交 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...
- Codeforces Gym 100803G Flipping Parentheses 线段树+二分
Flipping Parentheses 题目连接: http://codeforces.com/gym/100803/attachments Description A string consist ...
- Codeforces Gym 100231B Intervals 线段树+二分+贪心
Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...
- HDU 5700 区间交 线段树暴力
枚举左端点,然后在线段树内,更新所有左边界小于当前点的区间的右端点,然后查线段树二分查第k大就好 #include <cstdio> #include <cstring> #i ...
随机推荐
- Navicat连接MySQL8.0亲测有效
今天下了个 MySQL8.0,发现Navicat连接不上,总是报错1251: 原因是MySQL8.0版本的加密方式和MySQL5.0的不一样,连接会报错. 试了很多种方法,终于找到一种可以实现的: 更 ...
- ubuntu16.04 无法连接wifi和校园宽带问题的解决办法
我遇到的问题是在ubuntu16.04系统下无法进行上海大学校园宽带连接或者校园wifi连接,我一个一个来解决这两个问题. 1.无法连接校园宽带的问题:输入校园账号和密码后,宽带始终连接不上.(上海大 ...
- (2018干货系列四)最新Python学习路线整合
怎么学Python Python是一种面向对象的解释型计算机程序设计语言,纯粹的自由软件,常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起. Python初级开 ...
- TensorFlow 分布式实践
此wiki主要介绍分布式环境使用的一些条件,一直所要注意的内容: 确保在此之前阅读过TensorFlow for distributed 1.集群描述 当前tensorflow 的版本(0.8.0), ...
- 判断闰年C语言版
#include<stdio.h> int isLeap(int year) { // 必须先判断是平年的情况 后判断闰年的情况 == && year%!=) || yea ...
- 余额表前后台操作和对应sql
发生额的含义:产生于账行表. gl_je_lines账行表——>借贷(会产生额度,即发生额) —————————————————————————— gl_balances余额表: 余额 = ...
- Spring RestController 请求参数详解
Spring RestController 请求参数详解 引用作者jpfss 在阅读之前,最好先了解http请求的get,post,以及各种head头类型,请求参数类型. 无参数,设置RestCont ...
- mysql 5.7/percona server/mariadb 10.2安装与服务器参数优化
建议使用percona server linux generic版,从https://www.percona.com/downloads/Percona-Server-LATEST/下载,现在不在推荐 ...
- GitHub git 命令思维导图
GitHub git 命令思维导图 拖动图片至浏览器地址栏松手,点击回车看高清大图.
- RSD 直观介绍
RSD TOR RSD SLED Blade MEMORY REDFISH REDFISH with Storage IPMI https://yyscamper.gitbooks.io/the-wa ...