首页 > 其他分享 >abc236_e

abc236_e

时间:2023-08-15 12:55:12浏览次数:42  
标签:const int ll mid abc236 fo lld

abc236_e

二分+判断
如果是平均数,我们只需将每个数-mid,然后dp判断是和是否大于等于0即可
如果是中位数,那么我们将a[i]<mid看作-1,a[i]>=mid看作1,然后dp判断是否大于0即可

#include<algorithm>
#include<cstdio>
#include<cstring>
#define fo(i,a,b) for (int (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (int (i)=(b);(i)>=(a);(i)--)
using namespace std;
typedef long long ll;
typedef double db;

const db eps=1e-10;
const int N=1e5+5;
const ll mo=998244353;
const db inf=1ll<<60;
const db INF=1ll<<60;
ll a[N],d[N],e[N];
ll n,x,mx,tot;
db l,r,mid,b[N],f[N][2],c[N];
ll g[N][2];

bool bz[N];


bool check(db x){
    fo(i,0,n) fo(j,0,1) f[i][j]=-inf;
    fo(i,1,n) b[i]=c[i]-x;

    f[1][0]=0;
    f[1][1]=b[1];
    fo(i,2,n) {
        f[i][0]=f[i-1][1];
        f[i][1]=max(f[i-1][0], f[i-1][1])+b[i];
    }

    return (max(f[n][0], f[n][1]) >eps);
    
}
bool pd(ll x){
	fo(i,1,n) {
		if (e[i]<x) d[i]=-1;
		else d[i]=1;
	}
	fo(i,1,n) fo(j,0,1) g[i][j]=-INF;
	
	g[1][0]=0;
	g[1][1]=d[1];
	
	fo(i,2,n) {
		g[i][0]=g[i-1][1];
		g[i][1]=max(g[i-1][0], g[i-1][1])+d[i];
		
//		printf("%d %lld %lld\n",i,g[i][0], g[i][1]);
	}
	return (max(g[n][0],g[n][1])>0);
	
}
void solve(){
	int l=1,r=n,mid;
	
	while (l<r) {
		mid=(l+r+1)>>1;
		if (pd(a[mid])) l=mid;
		else r=mid-1;
	}
	
	printf("%lld",a[l]);
}
int main() {
   
//	freopen("data.in","r",stdin);

    scanf("%lld",&n);
    fo(i,1,n) {
        scanf("%lld",&a[i]);
        mx=max(mx,a[i]);

        c[i]=a[i];
        e[i]=a[i];
    }
    sort(a+1,a+n+1);
    
    l=0; r=mx;
    fo(i,1,200){
        mid=(l+r)/2.0;
        if (check(mid)) l=mid;
        else r=mid;
    }

    printf("%.9f\n",l);
    
    
	solve();

    return 0;
}

标签:const,int,ll,mid,abc236,fo,lld
From: https://www.cnblogs.com/ganking/p/17631050.html

相关文章

  • ABC236 E
    ABC263E题意从一个大小为n的数组选一些数,选的限制是:对于\(1\leqi\leqn-1\),\(a_i\)或者\(a_{i+1}\)被选。问题1:求符合题意要求的选法中最大平均数问题2:求符合题......
  • abc236 F - Spices
    题意:选\(S=\{1,2,\dots,2^n-1\}\)的一个子集\(E\),要求\(E\)的子集的异或和取遍\(S\)的所有元素。选取\(S_i\)要花费\(c_i\),问最小花费\(2\len\le16\)思......
  • abc236 E - Average and Median
    题意:在给定数组中选数,要求任意相邻的两数至少选一个。问选出来的数的最大平均数和最大中位数\(n\le1e5,1\lea_i\le1e9\)思路:平均数、中位数的典中典二分+转化this......
  • [ABC236H] Distinct Multiples
    题目传送门Solution首先不难想到容斥,我们可以钦定若干关系\((u,v)\),表示\(u,v\)的值相同,那么我们不妨设\(g(i)\)表示至少有\(i\)种这种关系的方案数,可以发现答案......
  • [ABC236H] Distinct Multiples
    一、题目点此看题二、解法考虑容斥第二个限制,如果钦定\(a_i=a_j\)我们就连边\((i,j)\),具体来说我们枚举边集\(E\)的子集\(S\),设\(f(S)\)表示满足\(\forall(u,......