奇怪的CE?
查看原帖
奇怪的CE?
535491
newbie_QwQ楼主2022/2/25 12:22

样例过了,交上去就是CE。不知为什么,求大佬看一下!

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
struct jiedian
{
    long long l,r,z;
}a[2000005];
long long c[500005];
void bulid(long long k,long long L,long long R)
{
    a[k].l=L,a[k].r=R;
    if(L==R)
    {
        a[k].z=c[L];
    }
    else
    {
        long long mid=(L+R)/2;
        bulid(k*2,L,mid);
        bulid(k*2+1,mid+1,R);
        a[k].z=a[k*2+1].z+a[k*2].z;
    }
}
void add(long long x,long long k,long long b)
{
    if(a[b].l==a[b].r)
    {
        a[b].z+=k;
    }
    else 
    {
        if(a[b*2+1].l<=x) add(x,k,b*2+1);
        if(a[b*2].r>=x) add(x,k,b*2);
        a[b].z+=k;
    }
}
long long search(long long L,long long R,long long b)
{
    long long sum=0;
    if(a[b].l>=L&&a[b].r<=R) return a[b].z;
    if(a[b*2].r>=L) sum+=search(L,R,b*2);
    if(a[b*2+1].l<=R) sum+=search(L,R,b*2+1);
    return sum;
}
int main()
{
    long long i,n,m,op,x,y,k;
    cin>>n>>m;
    for(i=1;i<=n;i++) cin>>c[i];
    bulid(1,1,n);
    for(i=1;i<=m;i++)
    {
        cin>>op;
        if(op==1)
        {
            cin>>x>>k;
            add(x,k,1);
        }
        if(op==2)
        {
            cin>>x>>y;
            cout<<search(x,y,1)<<endl;
        }
    }
    return 0;
}
2022/2/25 12:22
加载中...