#include <stdio.h>
#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
#define f_inline inline __attribute__((always_inline))
const int MAXSIZE = 1 << 20;
char buf[MAXSIZE], *p1, *p2;
#define gc() \
(p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin), p1 == p2) \
? EOF \
: *p1++)
char pbuf[1<<21];
int p, p3(-1);
void flush() {
fwrite(pbuf, 1, p3+1, stdout);
p3 = -1;
}
f_inline int uread(){
register int x(0);
register char ch;
while ((ch = gc()) < 48);
do{
x = (x << 1) + (x << 3) + (ch ^ 48);
}while ((ch = gc()) > 47);
return x;
}
void uprint(register const int x){
register const int tmp(x/10);
if (tmp) uprint(tmp);
pbuf[++p3] = (x-(tmp<<1)-(tmp<<3)+'0');
}
f_inline void print(register const int &x){
if (p3 > (1 << 20)) flush();
uprint(x);
pbuf[++p3] = '\n';
}
int a[500000];
int main(){
register const int n(uread());
register int m(uread());
for (register int i(0); i<n; ++i) a[i] = uread();
do{
register const int op(uread()), l(uread()-1), r(uread());
if (op == 1){
register const int x(uread());
if (x >= 2){
for (register int i(l); i<r; ++i){
if (!(a[i] % x)) a[i] /= x;
}
}else if (x == 2){
for (register int i(l); i<r; ++i){
if (!(a[i] & 1)) a[i] >>= 1;
}
}
}else{
register long long ans(0);
for (register int i(l); i<r; ++i) ans += a[i];
print(ans);
}
}while (--m);
flush();
return 0;
}
只得了 12 分,除 3 个 TLE,其它都是 WA。