求助卡常,97分(已开O2)
查看原帖
求助卡常,97分(已开O2)
180406
lilong楼主2022/1/12 11:26
#include<iostream>
#include<cstdio>
using namespace std;
int a[1000001];
int read()
{
	int sum=0;char ch=getchar();
	while (ch<'0' || ch>'9') ch=getchar();
	while (ch>='0' && ch<='9')
	{
		sum=sum*10+ch-'0';
		ch=getchar();
	}
	return sum;
}
int main()
{
	int n,m,x,y,z,t;
	n=read(),m=read();
	for(int i=1;i<=n;i++)
		a[i]=read();
	for(int i=1;i<=m;i++)
	{
		t=read();
		if(t==1)
		{
			x=read(),y=read(),z=read();
			if(z==1) continue;
			for(int j=x;j<=y;j+=7)
			{
				if(a[j]%z==0)a[j]/=z;
				if(a[j+1]%z==0&&j+1<=y)a[j+1]/=z;
				if(a[j+2]%z==0&&j+2<=y)a[j+2]/=z;
				if(a[j+3]%z==0&&j+3<=y)a[j+3]/=z;
				if(a[j+4]%z==0&&j+4<=y)a[j+4]/=z;
				if(a[j+5]%z==0&&j+5<=y)a[j+5]/=z;
				if(a[j+6]%z==0&&j+6<=y)a[j+6]/=z;
			}
		}
		if(t==2)
		{
			long long ans=0;
			x=read(),y=read();
			for(int j=x;j<=y;j+=7)
			{
				ans+=a[j];
				if(j+1<=y) ans+=a[j+1];
				if(j+2<=y) ans+=a[j+2];
				if(j+3<=y) ans+=a[j+3];
				if(j+4<=y) ans+=a[j+4];
				if(j+5<=y) ans+=a[j+5];
				if(j+6<=y) ans+=a[j+6];
			}
			printf("%lld\n",ans);
		}
	}
	return 0;
} 
2022/1/12 11:26
加载中...