CCF-CSP 202012-2 期末预测之最佳阈值C++

在这里插入图片描述
前缀和(数据预处理,降低查找循环复杂度!)

for(int i=1;i<=nums.length;i++){
sum[i]=sum[i-1]+nums[i];
}在这里插入代码片
sum[l,r]=sum[r]-sum[l-1];

源代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+4;

struct mcase{
	int y;
	int res;
};

vector<mcase>mtest;
set<int>st;
int nsum[maxn]={0};
int n;

void Init(){
	cin>>n; 
	mcase temp;
	temp.y=0;temp.res=0;
	mtest.push_back(temp);//索引为0不用 
	for(int i=0;i<n;i++){
		cin>>temp.y>>temp.res;
		mtest.push_back(temp);
	}
}

bool cmp(mcase a,mcase b){//结构体比较函数 
	if(a.y<b.y){
		return true;
	}
	return false;
}


int main(){
	Init();
	int maxsum=0;
	int ans=0;
	sort(mtest.begin(),mtest.end(),cmp);//将测试数据按照y值排序 
	for(int i=1;i<=n;i++){//前缀和 
		nsum[i]=nsum[i-1]+mtest[i].res;
	}
	for(int i=1;i<=n;i++){
		int tempy=mtest[i].y;
		if(st.count(tempy)){//若数据重复跳过 
			continue;
		}
		else{
			st.insert(tempy);
			int yucez1=nsum[n]-nsum[i-1];
			int yucez0=i-1-nsum[i-1];      
			int sumyuz=yucez1+yucez0;
	     	if(sumyuz>=maxsum){//大于等于是更新 
			maxsum=sumyuz;
			ans=tempy;
	    	}
		}
	}
	cout<<ans;
	return 0;
}在这里插入代码片

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值