社区讨论
学习珂学的最好方法是
P3987我永远喜欢珂朵莉~参与者 5已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @lqt91urv
- 此快照首次捕获于
- 2023/12/31 16:48 2 年前
- 此快照最后确认于
- 2023/12/31 19:14 2 年前
rt,把这个代码条对
(本人只是想调对代码,没有玩梗)
CPP#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int maxn=1e5+10,maxm=5e7+10,mod=1e9+7;
inline int read(){
int c,w=0,n=0;
while((c=getchar())<'0'||'9'<c) w=c=='-';
do n=n*10+c-'0';while('0'<=(c=getchar())&&c<='9');
return w?-n:n;
}
int write(int n){
if(n<0) putchar('-'),n=-n;
if(n>9) write(n/10);
putchar(n%10+'0');
return n;
}
int n,m,tot,tmpt,a[maxn],t[maxn],root[maxn*5],tmp[maxn],dt[maxm],val[maxm],l[maxm],r[maxm];
inline int newnode(int x){return dt[++tot]=x,val[tot]=rand(),tot;}
int merge(int x,int y){return x&&y?val[x]>val[y]?r[x]=merge(r[x],y),x:(l[y]=merge(x,l[y]),y):x+y;}
void split(int p,int v,int &x,int &y){
if(!(bool)p) return (void)(x=y=0);
if(dt[p]<=v) x=p,split(r[p],v,r[p],y);
else y=p,split(l[p],v,x,l[p]);
}
int build(int lq,int rq){
if(lq>rq) return 0;
if(lq==rq) return newnode(tmp[lq]);
int mid=lq+rq>>1,p=newnode(p);
return l[p]=build(lq,mid-1),r[p]=build(mid+1,rq),p;
}
void get(int x){
if(l[x]) get(l[x]);
tmp[++tmpt]=dt[x];
if(r[x]) get(r[x]);
}
void midfor(int x){/*debug*/
if(l[x]) midfor(l[x]);
cout<<dt[x]<<" ";
if(r[x]) midfor(r[x]);
}
signed main(){
n=read(),m=read();
for(int i=1;i<=n;++i){
a[i]=read();
for(int j=i;j<=n;j+=j&-j) t[j]+=a[i];
for(int j=1;j*j<=a[i];++j) if(a[i]%j==0){
root[j]=merge(root[j],newnode(i));
if(j*j!=a[i]) root[a[i]/j]=merge(root[a[i]/j],newnode(i));
}
}
for(int o=1;o<=m;++o){
int opt=read(),l=read(),r=read();
if(opt==1){
int x=read(),s1,s2,s3;
split(root[x],r,s2,s3),split(s2,l-1,s1,s2),tmpt=0;
if(s2) get(s2),s2=0;
for(int i=1;i<=tmpt;++i){
if(a[tmp[i]]%x) continue;
a[tmp[i]]/=x;
for(int j=tmp[i],k=a[tmp[i]]*(x-1);j<=n;j+=j&-j) t[j]-=k;
if(a[tmp[i]]%x==0) tmp[++s2]=tmp[i];
}
if(s2) s2=build(1,s2);
root[x]=merge(s1,merge(s2,s3));
}
else{
int ans=0;
for(int i=r;i;i-=i&-i) ans+=t[i];
for(int i=l-1;i;i-=i&-i) ans-=t[i];
write(ans),puts("");
}
}
return 0;
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...