zoukankan      html  css  js  c++  java
  • cf1278C——dp

    先预处理后一段的信息,然后前半段从前往后遍历一次,更新答案即可

    #include<bits/stdc++.h>
    using namespace std;
    #define N 200005
    
    int n,a[N];
    map<int,int>mp;
    
    int main(){
        int t;cin>>t;
        while(t--){
            cin>>n;
            mp.clear();
            for(int i=1;i<=2*n;i++)cin>>a[i];
            int now=0;mp[0]=2*n+1;
            for(int i=2*n;i>=n+1;i--){
                if(a[i]==1)now++;
                else now--;
                mp[now]=i;
            }
            
            int ans=0;
            if(mp[0]!=0)
                ans=2*n-mp[0]+1;
            now=0;
            for(int i=1;i<=n;i++){
                if(a[i]==1)now++;
                else now--;
                if(mp[-now]!=0)
                    ans=max(ans,i+2*n-mp[-now]+1);
            }
            
            cout<<2*n-ans<<'
    ';
        }
    } 
  • 相关阅读:
    树状数组
    LCA最近公共祖先
    ordered_set
    马拉车算法
    数论
    图论
    其他
    线段树
    序列自动机
    优先队列
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12109317.html
Copyright © 2011-2022 走看看