题目描述
自定长度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;
}