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+树,然后健身吧
我终于明白熬夜不是一种堕落,而是对现实的反抗了,难绷