求助卡常 88pts

P3987 我永远喜欢珂朵莉~

加上快读快些还是 88pts ```cpp #include<bits/stdc++.h> using namespace std; int read() { int get=0,w=1; char c=getchar(); while(c<'0'||c>'9') { if(c=='-') w=-1; c=getchar(); } while(c>='0'&&c<='9') { get=get*10+c-'0'; c=getchar(); } return get*w; } void write(long long x) { if(x<0) { putchar('-'); x=-x; } if(x>=10) write(x/10); putchar(x%10+'0'); } int i,j,l,r,x,n,m,type,num[100001]; long long s; int main() { n=read(),m=read(); for(register int i=1;i<=n;i++) num[i]=read(); for(i=1;i<=m;i++) { type=read(); if(type==1) { l=read(),r=read(),x=read(); for(register int j=l;j<=r;j++) if(num[j]%x==0) num[j]/=x; } else { s=0; l=read(),r=read(); for(register int j=l;j<=r;j++) s+=num[j]; write(s); putchar('\n'); } } return 0; } ```
by liupan2010 @ 2023-03-31 21:34:54


加上分类讨论和位运算 91 pts 不会循环展开。 ```cpp #include<bits/stdc++.h> using namespace std; inline int read() { int get=0,w=1; char c=getchar(); while(c<'0'||c>'9') { if(c=='-') w=-1; c=getchar(); } while(c>='0'&&c<='9') { get=get*10+c-'0'; c=getchar(); } return get*w; } inline void write(long long x) { if(x<0) { putchar('-'); x=-x; } if(x>=10) write(x/10); putchar(x%10+'0'); } int i,j,l,r,x,n,m,type,num[100001]; long long s; int main() { n=read(),m=read(); for(register int i=1;i<=n;i++) num[i]=read(); for(i=1;i<=m;i++) { type=read(); if(type==1) { l=read(),r=read(),x=read(); if(x>=2) { for(register int j=l;j<=r;j++) if(num[j]%x==0) num[j]/=x; } else if(x==2) { for(register int j=l;j<=r;j++) if(num[j]&1==0) num[j]>>=1; } } else { s=0; l=read(),r=read(); for(register int j=l;j<=r;j++) s+=num[j]; write(s); putchar('\n'); } } return 0; } ```
by liupan2010 @ 2023-03-31 21:40:43


@[liupan2010](/user/875806) 试一下 `fread` 和 `fwrite`?
by rainygame @ 2023-04-30 22:52:11


已经 A 了,但还是 thx.
by liupan2010 @ 2023-05-01 07:54:06


|