code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 3*100010;
const int NA = 1000010;
#define lson(x) (x<<1)
#define rson(x) (x<<1|1)
#define mid ((l+r)>>1)
int n;
int a[N];
int sum[N<<2],amax[N<<2];
int dex[NA];
void SetDex(){
for(int i = 1; i <= NA-10; i++) for(int j = i; j <= NA-10; j+=i) dex[j]++;
}
void pushup(int id,int l,int r){
sum[id] = sum[lson(id)]+sum[rson(id)];
amax[id] = max(amax[lson(id)],amax[rson(id)]);
}
void build(int id,int l,int r){
if(l==r){
sum[id] = a[l];
amax[id] = a[l];
return;
}
build(lson(id),l,mid);
build(rson(id),mid+1,r);
pushup(id,l,r);
}
void update(int id,int l,int r,int p,int x){
if(l==r){
a[l] = x;
sum[id] = x;
amax[id] = x;
return;
}
if(p<=mid) update(lson(id),l,mid,p,x);
else update(rson(id),mid+1,r,p,x);
pushup(id,l,r);
}
int AskMax(int id,int l,int r,int ql,int qr){
if(ql<=l&&r<=qr) return amax[id];
return max(0LL,max((ql<=mid?AskMax(lson(id),l,mid,ql,qr):0LL),(qr>=mid+1?AskMax(rson(id),mid+1,r,ql,qr):0LL)));
}
int AskSum(int id,int l,int r,int ql,int qr){
//printf("Segment Ask:[%d](%d->%d),ask : %d->%d\n",id,l,r,ql,qr);
if(ql<=l&&r<=qr) return sum[id];
return (ql<=mid?AskSum(lson(id),l,mid,ql,qr):0)+(qr>=mid+1?AskSum(rson(id),mid+1,r,ql,qr):0);
}
void SegDex(int ql,int qr){
if(AskMax(1,1,n,ql,qr)<=2) return;
for(int i = ql; i <= qr; i++) a[i] = dex[a[i]];
build(1,1,n);
}
signed main(){
SetDex();
int q;
scanf("%lld%lld",&n,&q);
for(int i = 1; i <= n; i++) scanf("%lld",&a[i]);
build(1,1,n);
while(q--){
int op,l,r;
scanf("%lld",&op);
if(op==2){
scanf("%lld%lld",&l,&r);
printf("%lld\n",AskSum(1,1,n,l,r));
} else {
scanf("%lld%lld",&l,&r);
SegDex(l,r);
}
}
return 0;
}
返回
UnexpectedResponse: got an unexpected response when requesting `https://codeforces.com/data/submitSource`: error decoding response body: invalid digit found in string