CF234C 1300

题意

最后要形成形如前面从1k范围内全为负数,从k+1n范围内全为正数,没有0的存在,
那此时最少应该改变几个值。

解析

ca[i]统计前面到i一共有多少个>=0的,cb[i]代表后面到i一共有多少个<=0的
划分分界点k,求最小的ca[k] + cb[k+1]。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10,M = 1e6 + 10;
int n;
int a[N],ca[N],cb[N];
int main(){
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }    
    for(int i=1;i<=n;i++){
        ca[i] = ca[i-1] + (a[i] >= 0);
    }
    for(int i=n;i;i--){
        cb[i] = cb[i+1] + (a[i] <= 0);
    }
    int res = 1 << 30;
    for(int i=1;i<n;i++){
        res = min(res,ca[i] + cb[i+1]);
    }
    printf("%d",res);
    return 0;
}
posted @   Isaac233  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示