求问为什么Line72不能删掉
查看原帖
求问为什么Line72不能删掉
708103
封禁用户楼主2022/4/6 22:20

为什么注释这行不能删掉呢,明明应该是x的因数才在vec[x]里面的

#include <bits/stdc++.h>
using namespace std;
long long c[100005];
int a[100005],n;
vector<int> vec[500005];
int read()
{
	int x=0;
	char ch=getchar();
	while(ch<'0'||ch>'9')ch=getchar();
	while('0'<=ch&&ch<='9')x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
	return x;
}
void write(long long x,bool f)
{
	if(!x)
	{
		if(f)putchar('0');
		return;
	}
	write(x/10,false);
	putchar(x%10+'0');
	return;
}
int lowbit(int x)
{
	return x&(-x);
}
void add(int x,int v)
{
	for(int i=x;i<=n;i+=lowbit(i))c[i]+=v;
	return;
}
long long sum(int x)
{
	long long res=0;
	for(int i=x;i;i-=lowbit(i))res+=c[i];
	return res;
}
void init()
{
	for(int i=1;i<=5e5;i++)vec[i].push_back(0);
	for(int i=1;i<=n;i++)
	{
		add(i,a[i]);
		for(int j=1;j*j<=a[i];j++)
		{
			if(a[i]%j!=0)continue;
			vec[j].push_back(i);
			if(a[i]/j!=j)vec[a[i]/j].push_back(i);
		}
	}
	return;
}
int main()
{
	int m;
	n=read();m=read();
	for(int i=1;i<=n;i++)a[i]=read();
	init();
	while(m--)
	{
		int op,l,r;
		op=read();l=read();r=read();
		if(op==1)
		{
			int x=read();
			if(x==1)continue;
			for(auto it=--upper_bound(vec[x].begin(),vec[x].end(),r);*it>=l;it--)
			{
				int p=*it;
				if(a[p]%x!=0)continue;//这行
				add(p,a[p]/x-a[p]);
				a[p]/=x;
				if(a[p]%x!=0)vec[x].erase(it);
			}
		}
		else write(sum(r)-sum(l-1),true),putchar('\n');
	}
	return 0;
}
2022/4/6 22:20
加载中...