LOADING

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

daily 3

CF 26B

水题,基本上就是个括号序列的裸体,记得不要乱清空now_len

void solve(){
  string s;
  cin>>s;
  vector<char>st;
  int last_len=0;
  int ans=0;
  for(int i=0;i<s.size();++i){
    if(s[i]=='('){
        st.push_back(s[i]);
    }else{
        while(st.size()&&st.back()==')')st.pop_back();
        if(st.size()){
            last_len+=2;
            ans=max(ans,last_len);
            st.pop_back();
        }
    }
  }
  cout<<ans<<'\n';
  return;
}

CF 976C

思维题,把对应的序列按照l升序,r降序进行排列,然后判断就好了

struct node{
    int l,r,id;
};
void solve(){
  int n;
  cin>>n;
  vector<node>a(n);
  for(int i=0;i<n;++i){
    cin>>a[i].l>>a[i].r;
    a[i].id=i;
  }
  sort(a.begin(),a.end(),[&](node a,node b){
    return a.l==b.l?a.r>b.r:a.l<b.l;
  });
  for(int i=0;i<n-1;++i){
    if(a[i].r>=a[i+1].r){
        cout<<a[i+1].id+1<<' '<<a[i].id+1<<'\n';
        return;
    }
  }
  cout<<-1<<' '<<-1<<'\n';
  return;
}

CF 1354D

树状数组板子题,加了个二分,每次用二分判断第k个元素

#define lowbit(x) x&-x
void solve(){
  int n,k;cin>>n>>k;
  vector<int>tree(n+1);
  auto add=[&](int x,int v){
    while(x<=n){
        tree[x]+=v;
        x+=lowbit(x);
    }
  };
  auto query=[&](int x){
    ll ans=0;
    while(x){
        ans+=tree[x];
        x-=lowbit(x);
    }
    return ans;
  };
  auto getk=[&](int x){
    int l=1,r=n;
    while(l<=r){
        int m=(l+r)>>1;
        int tmp=query(m);
        if(tmp<x){
            l=m+1;
        }else{
            r=m-1;
        }
    }
    return l;
  };
  for(int i=0;i<n;++i){
    int x;cin>>x;
    add(x,1);
  }
  for(int i=0;i<k;++i){
    int x;cin>>x;
    if(x>0){
        add(x,1);
    }else{
        int qn=query(n);
        int id=getk(-x);
        add(id,-1);
    }
  }
  if(query(n)==0){
    cout<<0<<'\n';
  }else{
    cout<<getk(1)<<'\n';
  }
  return;
}

小睡一会儿,待会起来把网络背了,晚上看B和B+树,然后健身吧

我终于明白熬夜不是一种堕落,而是对现实的反抗了,难绷