## L1-110 这不是字符串题（模拟）

题目链接：https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1913922872972247045&page=1

**题目分析：这道题是模拟题，涉及到了很多数组的函数，像reverse,insert,erase等等，需要熟练掌握这些函数，1操作还用到了滑动窗口技巧，也是需要掌握的**

```cpp
#include<bits/stdc++.h>
using namespace std;
//C++的区间函数都是左闭右开的,包含开始，但不包含结束
int main(){
    int N,M;
    cin>>N>>M;
    vector<int> arr(N);
    for(int i=0;i<N;i++){
        cin>>arr[i];
    }
    for(int i=0;i<M;i++){
        int op; cin>>op;
        if(op==1){
            int l1; cin>>l1;
            vector<int> L1(l1);
            for(int a=0;a<l1;a++){
                cin>>L1[a];
            }
            int l2; cin>>l2;
            vector<int> L2(l2);
            for(int a=0;a<l2;a++){
                cin>>L2[a];
            }
            //查找操作使用滑动窗口技巧
            int pos=-1;//这里可以使用pos的一个特殊标志位来判断是否找到了
            for(int j=0;j<=arr.size()-l1;j++){
                bool find=true;
                for(int h=0;h<l1;h++){
                    if(arr[j+h]!=L1[h]){
                        find=false;
                        break;
                    }
                }
                if(find){
                    pos=j;
                    break;
                }
            }
            if(pos!=-1){
                
                arr.erase(arr.begin()+pos,arr.begin()+pos+l1);
                arr.insert(arr.begin()+pos,L2.begin(),L2.end());
            }
        }
        else if(op==2){
            vector<int> new_arr;
            int j; int n=arr.size();
            for(j=0;j<n;j++){
                new_arr.push_back(arr[j]);
                if(j<n-1 && (arr[j]+arr[j+1])%2==0){
                    new_arr.push_back((arr[j]+arr[j+1])/2);
                }
            }
            arr=new_arr;
        }
        else if(op==3){
            int l,r;
            cin>>l>>r;
            reverse(arr.begin()+l-1,arr.begin()+r);
        }
    }
    for(int i=0;i<arr.size();i++){
        if(i>0){
            cout<<" ";
        }
        cout<<arr[i];
    }
    return 0;
}
