```cpp
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
int T=0;
namespace SegmentTree
{
#define maxn 100005
int n;
ll num[maxn];
struct LaCampanella
{
int l,r;
ll sum;
bool fix; // 该区间是(1)否(0)不用再修改
} a[maxn<<2];
#define ls(k) (k<<1)
#define rs(k) (k<<1|1)
inline void update(const int &k)
{
if(a[k].l==a[k].r)
return;
a[k].sum=a[ls(k)].sum+a[rs(k)].sum;
a[k].fix=a[ls(k)].fix&&a[rs(k)].fix;
}
inline void build(int k,int l,int r)
{
a[k].l=l,a[k].r=r;
if(l==r)
{
a[k].sum=num[l];
a[k].fix=0;
return;
}
int mid=(l+r)>>1;
build(ls(k),l,mid);
build(rs(k),mid+1,r);
update(k);
}
inline ll query(int k,int l,int r)
{
if(a[k].l==l&&a[k].r==r)
return a[k].sum;
int mid=(a[k].l+a[k].r)>>1;
if(r<=mid)
return query(ls(k),l,r);
else if(l>mid)
return query(rs(k),l,r);
else
return query(ls(k),l,mid)+query(rs(k),mid+1,r);
}
inline void modify(int k,int l,int r)
{
if(a[k].l==a[k].r)
{
a[k].sum=(ll)sqrtl(a[k].sum);
if(a[k].sum<=1)
a[k].fix=1;
return;
}
int mid=(a[k].l+a[k].r)>>1;
if(r<=mid)
{
if(!a[ls(k)].fix)
modify(ls(k),l,r);
}
else if(l>mid)
{
if(!a[rs(k)].fix)
modify(rs(k),l,r);
}
else
{
if(!a[ls(k)].fix)
modify(ls(k),l,mid);
if(!a[rs(k)].fix)
modify(rs(k),mid+1,r);
}
update(k);
}
}
using namespace SegmentTree;
int q,x,l,r;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
while(cin >> n)
{
cout << "Case #" << (++T) << endl;
for(int i=1;i<=n;++i)
cin >> num[i];
build(1,1,n);
cin >> q;
while(q--)
{
cin >> x >> l >> r;
if(l>r)
l^=r^=l^=r;
if(x==1)
cout << query(1,l,r) << endl;
else if(x==0)
modify(1,l,r);
}
cout << endl;
}
return 0;
}
```
by SlaineTroyard @ 2023-03-19 19:39:51
~~线段树这种程度的清空应该可以吧~~
by SlaineTroyard @ 2023-03-19 19:41:10
```cpp
cout << "Case #" << (++T) << endl;
```
->
```cpp
cout << "Case #" << (++T) << ":" << endl;
```
by zjy0004 @ 2023-03-19 19:43:40
@[Franz_Liszt](/user/450246) 大多数古老OJ的输出格式都比较奇怪,还是要多注意
by zjy0004 @ 2023-03-19 19:45:16
@[OIdrearmer_Z](/user/479493) 我超,wssb
过了 thx
by SlaineTroyard @ 2023-03-19 19:45:17