#define PROBLEM "https://judge.yosupo.jp/problem/range_reverse_range_sum"
#include"../template.h"
#include"SqrtDecomposition/Split_Rebuild/Simplified_version.h"voidsolve(){intn,q;cin>>n>>q;vector<int>a(n+1);for(inti=1;i<=n;i++){cin>>a[i];}Sqrtsqrt(n,a);sqrt.rebuild();while(q--){if(sqrt.blockId.size()>3000)sqrt.rebuild_if_need();inttype,l,r;cin>>type>>l>>r;l++;if(type==0){sqrt.Reverse(l,r);}elseif(type==1){cout<<sqrt.sum(l,r)<<'\n';}}}
#line 1 "DataStructure/Range_reverse_range_sum.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/range_reverse_range_sum"
#line 2 "template.h"
#include<bits/stdc++.h>usingnamespacestd;#define ll long long
#define MOD (ll)(1e9+7)
#define all(x) (x).begin(),(x).end()
#define unique(x) x.erase(unique(all(x)), x.end())
#define INF32 ((1ull<<31)-1)
#define INF64 ((1ull<<63)-1)
#define inf (ll)1e18
#define vi vector<int>
#define pii pair<int, int>
#define pll pair<ll, ll>
#define fi first
#define se second
constintmod=998244353;voidsolve();intmain(){ios_base::sync_with_stdio(false);cin.tie(NULL);// cin.exceptions(cin.failbit);// int t; cin >> t;// while(t--)solve();cerr<<"\nTime run: "<<1000*clock()/CLOCKS_PER_SEC<<"ms"<<'\n';return0;}#line 2 "DataStructure/SqrtDecomposition/Split_Rebuild/Simplified_version.h"
structBlock{vector<int>v;intsz=0,assigned=-1;boolrev=false;llsum=0;Block(){}Block(int_sz,int_assign,bool_rev=false){this->sz=_sz;this->assigned=_assign;this->rev=_rev;}Block(vector<int>&a,int_assign=-1,bool_rev=false){this->v=a;this->sz=a.size();this->assigned=_assign;this->rev=_rev;this->sum=accumulate(all(a),0LL);}intsize(){returnsz;}llgetSum(){returnassigned!=-1?1LL*assigned*sz:sum;}voidperform_reverse(){rev^=true;if(assigned!=-1)return;reverse(all(v));}voidtruncate(intk){sz=k;if(rev)perform_reverse();if(assigned!=-1)return;v.resize(k);if(assigned!=-1){sum=1LL*assigned*sz;}else{sum=accumulate(all(v),0ll);}}};structSqrt{intn,cnt,block_sz=450;vector<Block>blocks;vector<int>a,blockId;Sqrt(){}Sqrt(int_n,vector<int>&a){this->n=_n;this->a=a;cnt=0;blocks.assign(4000,{});}voidrebuild(){cnt=0;blockId.clear();for(inti=1;i<=n;i+=block_sz){intl=i,r=min(i+block_sz-1,n);vector<int>v(a.begin()+l,a.begin()+r+1);blocks[++cnt]=Block(v);blockId.push_back(cnt);}}intsplit(inti){if(i>n)returnblockId.size();intcurPos=1;for(autoit=blockId.begin();it!=blockId.end();it++){intid=*it;intcurL=curPos,curR=curPos+blocks[id].size()-1;if(curL<=i&&i<=curR){if(i==curL)returnit-blockId.begin();if(blocks[id].rev){blocks[id].perform_reverse();}intk=i-curL;intnewId=++cnt;if(blocks[id].assigned!=-1){blocks[newId]=Block(curR-curL+1-k,blocks[id].assigned);}else{vector<int>tail=vector<int>(blocks[id].v.begin()+k,blocks[id].v.end());blocks[newId]=Block(tail);}blocks[id].truncate(k);++it;it=blockId.insert(it,newId);returnit-blockId.begin();}curPos=curR+1;}return0;}llsum(intl,intr){l=split(l),r=split(r+1);llres=0;for(intj=l;j<r;++j)res+=blocks[blockId[j]].getSum();returnres;}voidReverse(intl,intr){l=split(l),r=split(r+1);for(intj=l;j<r;++j)blocks[blockId[j]].rev^=1;reverse(blockId.begin()+l,blockId.begin()+r);}voidrebuild_if_need(){a.resize(1);for(autoit:blockId){if(blocks[it].rev){blocks[it].perform_reverse();}if(blocks[it].assigned==-1){for(autox:blocks[it].v)a.push_back(x);}else{for(inti=0;i<blocks[it].sz;i++)a.push_back(blocks[it].assigned);}}n=a.size()-1;rebuild();}};#line 5 "DataStructure/Range_reverse_range_sum.test.cpp"
voidsolve(){intn,q;cin>>n>>q;vector<int>a(n+1);for(inti=1;i<=n;i++){cin>>a[i];}Sqrtsqrt(n,a);sqrt.rebuild();while(q--){if(sqrt.blockId.size()>3000)sqrt.rebuild_if_need();inttype,l,r;cin>>type>>l>>r;l++;if(type==0){sqrt.Reverse(l,r);}elseif(type==1){cout<<sqrt.sum(l,r)<<'\n';}}}