1 solutions

  • 0
    @ 2025-11-5 17:26:41

    C++ :

    #include<cstdio>
    using namespace std;
    int T,n;double sum[700000];
    double anss[255000];
    int in();
    void Push(int i)
    {
        sum[i]=sum[i<<1]+sum[i<<1|1];
    }
    void build(int l,int r,int i)
    {
        if(l==r)
        {
    		T++;
            scanf("%lf",&sum[i]);
            anss[T]=sum[i];
            return ;
        }
        int m=(l+r)>>1;
        build(l,m,i<<1);
        build((m)+1,r,i<<1|1);
        Push(i);
    }
    void updata(int a,int add,int l,int r,int i)
    {
        if(l==r)
        {
            sum[i]+=add;
            return ;
        }
        int m=(l+r)>>1;
        if(a<=m)
         updata(a,add,l,m,i<<1);
        else
         updata(a,add,m+1,r,i<<1|1);
        Push(i);
    }
    double query(int L,int R,int l,int r,int i)
    {
        if(L<=l&&R>=r)
           return sum[i];
        double result=0.0;
        int m=(l+r)>>1;
        if(L<=m)
            result+=query(L,R,l,m,i<<1);
        if(R>m)
            result+=query(L,R,m+1,r,i<<1|1);
        return result;
    }
    int main()
    {
        char c[8];
        int u=T;
        	int a,b;
    		n=in();
            build(1,n,1);
            int m;
    		m=in();
            for(int i=1;i<=m;i++)
            {
    			a=in();
    			b=in();
    			printf("%.2lf\n",query(a,b,1,n,1)*3.14);
    			updata((a+b)/2,-anss[(a+b)/2],1,n,1);
    			anss[(a+b)/2]=0;
            }
                
    
        //while(1);
    }
    int in()
    {
        char c=getchar();
        int x=0;
        while(c<'0'||c>'9')c=getchar();
        for(;c>='0'&&c<='9';c=getchar())x=x*10+c-'0';
        return x;
    }
    
    
    • 1

    Information

    ID
    18436
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By