Binary Differences
生活随笔
收集整理的這篇文章主要介紹了
Binary Differences
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
https://csacademy.com/contest/archive/task/binary-differences
n個數,只有0和1,求所有子區間價值不相同的有多少中,價值是0的個數-1的個數
解法:0的貢獻是1,1的貢獻是-1,求出貢獻的前綴和為s[i],利用上一個區間[l,r]求出當前區間[sum-r,sum-l],同時更新最大范圍
//#pragma comment(linker, "/stack:200000000") //#pragma GCC optimize("Ofast,no-stack-protector") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") //#pragma GCC optimize("unroll-loops") #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pi acos(-1.0) #define ll long long #define mod 1000000007 #define C 0.5772156649 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 #define pil pair<int,ll> #define pii pair<int,int> #define ull unsigned long long #define base 1000000000000000000 #define fio ios::sync_with_stdio(false);cin.tie(0)using namespace std;const double g=10.0,eps=1e-12; const int N=100000+10,maxn=100000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;int a[N]; int main() {int n,sum=0;scanf("%d",&n);int l,r,tel,ter;l=r=tel=ter=0;for(int i=1;i<=n;i++){scanf("%d",&a[i]);if(a[i])sum--;else sum++;l=min(l,sum-ter);r=max(r,sum-tel);tel=min(tel,sum);ter=max(ter,sum);}printf("%d\n",r-l+1);return 0; } /****************************************/View Code
?
轉載于:https://www.cnblogs.com/acjiumeng/p/8522630.html
總結
以上是生活随笔為你收集整理的Binary Differences的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机油机滤多少钱啊?
- 下一篇: AngularJS 杂项知识点