#1TLE,97分,求助卡常
查看原帖
#1TLE,97分,求助卡常
516468
_Give_up_楼主2022/8/11 11:12
#include<bits/stdc++.h>
#define N 1000010

using namespace std;

int read()
{
    int x = 0,f = 1;
    char c = getchar();
    while(c<'0' || c>'9')
	{
        if(c=='-') f = -1;
        c = getchar();
    }
    while(c>='0' && c<='9')
	{
        x = (x<<3)+(x<<1)+(c^48);
        c = getchar();
    }
    return x*f;
}

int a[N];

signed main()
{
    int n=read(),m=read();
    for(int i=1;i<=n;i++)
        a[i]=read();
    while(m--)
    {
        int t = read();
        if(t==1)
        {
            int x=read(),y=read(),z=read();
            if(z==1) continue;
            for(int j=x;j<=y;j+=11)
            {
                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(a[j+7]%z==0 && j+7<=y) a[j+7]/=z;
                if(a[j+8]%z==0 && j+8<=y) a[j+8]/=z;
                if(a[j+9]%z==0 && j+9<=y) a[j+9]/=z;
                if(a[j+10]%z==0 && j+10<=y) a[j+10]/=z;
            }
        }
        else
        {
            long long ans=0;
            int x=read(),y=read();
            for(int j=x;j<=y;j+=11)
            {
                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];
                if(j+7<=y) ans += a[j+7];
                if(j+8<=y) ans += a[j+8];
                if(j+9<=y) ans += a[j+9];
                if(j+10<=y) ans += a[j+10];
            }
            printf("%lld\n",ans);
        }
    }
    return 0;
}
2022/8/11 11:12
加载中...