zoukankan      html  css  js  c++  java
  • BZOJ 4985: 评分

    二分答案

    >=key的记为1

    f[i]表示令i位置为1所需要的最少的1的个数

    队列模拟

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,m,ans,d[1000005],a[1000005],stack[1000005];
    int check(int key){
    	int ans=0;
    	for (int i=1; i<=n-m; i++) if (d[i]>=key) ans++;
    	int head=0,tail=0;
    	for (int i=1; i<=n; i++){
    		if (!a[i]) stack[++tail]=1;
    		else if (a[i]>=key) stack[++tail]=0;
    		else stack[++tail]=1e9;
    	}
    	while (tail-head+1>=3){
    		int x1=stack[++head],x2=stack[++head],x3=stack[++head];
    		stack[++tail]=min(x1+x2,min(x1+x3,min(x2+x3,(int)1e9)));
    	}
    	return stack[tail]<=ans;
    }
    int main(){
    	scanf("%d%d",&n,&m);
    	for (int i=1; i<=m; i++){
    		int x,y;
    		scanf("%d%d",&x,&y);
    		a[y]=x;
    	}
    	for (int i=1; i<=n-m; i++) scanf("%d",&d[i]);
    	int l=0,r=1e9;
    	while (l<r){
    		int mid=(l+r+1)>>1;
    		if (check(mid)) l=mid;
    		else r=mid-1;
    	}
    	printf("%d
    ",l);
    	return 0;
    }
    

      

  • 相关阅读:
    zfs
    targetcli
    targetcli
    自动制linux iso包
    yum解决重复包,依赖冲突问题
    lvm相关
    vmware相关
    配置本地yum源
    k8s安装prometheus监控
    流水线基础-Pipeline
  • 原文地址:https://www.cnblogs.com/silenty/p/9902396.html
Copyright © 2011-2022 走看看