2 月 9 日算法练习- 数据结构 - 除夕快乐♪٩(´ω`)و♪

翻转括号序列

2 月 9 日算法练习- 数据结构 - 除夕快乐♪٩(´ω`)و♪_第1张图片2 月 9 日算法练习- 数据结构 - 除夕快乐♪٩(´ω`)و♪_第2张图片

暴力过20%数据

思路:括号合法序列问题可以利用前缀和,将"(“看成 1,”)"看成 0,规律是到某个位置为止的前缀和>0并且到最后前缀和=0。

#include
using namespace std;
const int N = 1e6+10;
int n,m;
string s;
int a[N];

int main( ){
    cin>>n>>m>>s;
    for(int i=0;i<s.size();i++)
        if(s[i]=='(')a[i+1]=1;
        else a[i+1]=-1;
    while(m--){
        int op,L,R;
        cin>>op;
        if(op==1){
            cin>>L>>R;
            for(int i=L;i<=R;i++){
                a[i] = -a[i];
            }
        }else if(op==2){
            cin>>L;
            int sum =0,ans = 0;
            for(int i=L;i<=n;i++){
                sum += a[i];
                if(sum<0)break;
                if(!sum) ans = max(ans,i);
            }
            cout<<ans<<'\n';
        }
    }
    
    return 0;
}

你可能感兴趣的:(算法,算法,数据结构)