『8.27 模拟赛』水题

题目链接戳这里!!

题目描述

自定长度n的01序列,给定m个区间,价值为所有区间1的个数*0的个数之和,求最大价值。



解题思路

对于每个区间,由均值不等式可知,区间内的0和1的个数越相近,乘积越大,所以我们让整个区间是01相间即可。



代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
int n,m;
int main(){
    scanf("%d%d",&n,&m);
    ll ans=0;
    for(register int i=1;i<=m;i++){
        ll l,r;
        scanf("%lld%lld",&l,&r);
        if(!((r-l+1)&1))ans+=((r-l+1)>>1)*((r-l+1)>>1);
        else ans+=((r-l+1)>>1)*(((r-l+1)>>1)+1);
    }
    cout<<ans<<endl;
}

猜你喜欢

转载自www.cnblogs.com/Fang-Hao/p/9544613.html