LOADING

加载过慢请开启缓存,浏览器默认开启

daily 2

2023/6/25 daily

CF 917A

int main(){
    string s;
    cin>>s;
    int ans=0;
    int n=s.size();
    for(int i=0;i<n;++i){
        int left=0,vir=0;
        for(int j=i;j<n;++j){
            if(s[j]=='('){
                ++left;
            }
            if(s[j]==')'){
                --left;
            }
            if(s[j]=='?'){
                if(left>0){
                    --left,++vir;
                }else{
                    ++left;
                }

            }
            if(left<0&&vir){
                left+=2,--vir;
            }
            if(left<0&&!vir){
                break;
            }
            if(left==0){
                ++ans;
            }
        }
    }
    cout<<ans<<'\n';
    return 0;
}

CF 930C

int main(){
  int n,m;
  cin>>n>>m;
  vector<int>dif(m+2);
  for(int i=0;i<n;++i){
    int l,r;
    cin>>l>>r;
    ++dif[l],--dif[r+1];
  }
  for(int i=1;i<=m;++i){
    dif[i]+=dif[i-1];
  }
  vector<int>seq(m+1);
  int len=0;
  vector<int>dp1(m+1),dp2(dp1);
  for(int i=1;i<=m;++i){
    if(dif[i]>=seq[len]){
      seq[++len]=dif[i];
    }else{
      int pos=upper_bound(seq.begin()+1,seq.begin()+len+1,dif[i])-seq.begin();
      seq[pos]=dif[i];
    }
    dp1[i]=len;
  }
  len=0;
  fill(seq.begin(),seq.end(),0);
  for(int i=m;i>=1;--i){
    if(dif[i]>=seq[len]){
      seq[++len]=dif[i];
    }else{
      int pos=upper_bound(seq.begin()+1,seq.begin()+len+1,dif[i])-seq.begin();
      seq[pos]=dif[i];
    }
    dp2[i]=len;
  }
  int ans=0;
  for(int i=1;i<=m;++i){
    ans=max(ans,dp1[i]+dp2[i]-1);
  }
  cout<<ans<<'\n';
}