萌新只会分块,样例都过不了/kk
查看原帖
萌新只会分块,样例都过不了/kk
312393
ADay楼主2020/5/9 17:43
#include<bits/stdc++.h>
using namespace std;

#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[1<<21],*p1=buf,*p2=buf;

inline void readint(int &x)
{
    int f=1;x=0;
    char ch=getchar();
    while(!isdigit(ch))
    {
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(isdigit(ch))
    {
        x=(x<<3)+(x<<1)+ch-48;
        ch=getchar();
    }
    x*=f;
}

const int N=5e5+5;
int n,a[N],bl[N],sum[N],num,q,x1,x2,x3;

inline int question(int x,int y)
{
    int res=0;
    for(int i=x;i<=min(bl[x]*num,y);i++)res+=a[i];
    if(bl[x]!=bl[y])for(int i=(bl[y]-1)/num+1;i<=y;i++)res+=a[i];
    for(int i=bl[x]+1;i<bl[y];i++)res+=sum[i];
    return res;
}

int main()
{
    readint(n);num=sqrt(n);readint(q);
    for(int i=1;i<=n;i++)
    {
        readint(a[i]);
        bl[i]=(i-1)/num+1;
        sum[bl[i]]+=a[i];
    }
    while(q--)
    {
        readint(x1),readint(x2),readint(x3);
        if(x1==1)a[x2]+=x3,sum[bl[x2]]+=x3;
        else printf("%d\n",question(x2,x3));
    }
    return 0;
}
2020/5/9 17:43
加载中...