首页 > 其他 > 详细

JOIOI上帝造题的七分钟(二维树状树组区间修改、区间查询)(2020.7.3)

时间:2020-07-03 19:03:29      阅读:59      评论:0      收藏:0      [点我收藏+]

JOIOI上帝造题的七分钟

二维树状树组区间修改、区间查询

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int n,m;
int a[2050][2050],t1[2050][2050],t2[2050][2050],t3[2050][2050],t4[2050][2050];
int lowbit(int x)
{
    return x&(-x);
}
void add(int x,int y,int v)
{
    for(int i=x;i<=n;i+=lowbit(i))
    {
        for(int j=y;j<=m;j+=lowbit(j))
        {
            t1[i][j]+=v;
            t2[i][j]+=v*x;
            t3[i][j]+=v*y;
            t4[i][j]+=v*x*y; 
        }
    }
}
void addd(int x,int y,int x1,int y1,int v)
{
    add(x,y,v);
    add(x,y1+1,-v);
    add(x1+1,y,-v);
    add(x1+1,y1+1,v);
}
int ask(int x,int y)
{
    int ans=0;
    for(int i=x;i;i-=lowbit(i))
    {
        for(int j=y;j;j-=lowbit(j))
        {
            ans+=(x+1)*(y+1)*t1[i][j]-(y+1)*t2[i][j]-(x+1)*t3[i][j]+t4[i][j];
        }
    }
    return ans;
}
int askk(int x,int y,int x1,int y1)
{
    return ask(x1,y1)-ask(x1,y-1)-ask(x-1,y1)+ask(x-1,y-1);
}
int inline read()
{
    int ans=0,f=1;
    char ch=getchar();
    if(ch==EOF) exit(0);
    while(!isdigit(ch))
    {
        if(ch==-)
        f=-1;
        ch=getchar();
    }
    while(isdigit(ch))
    {
        ans=ans*10+ch-0;
        ch=getchar();
    }
    return ans*f;
}
char readchar()
{
    char ch;
    while (ch=getchar(),ch!=EOF && !isalpha(ch));
    return ch;
}
void write(int x)
{
    if(x<0) 
    {
        putchar(-);
        x=-x;
    }
    if(x/10) write(x/10);
    putchar(x%10+0);
}
int main()
{
    char ch;
    int a,b,c,d,e;
    readchar();
    n=read();
    m=read();
    while(ch=readchar(),ch!=EOF)
    {
        a=read();
        b=read();
        c=read();
        d=read();
        if(ch==L)
        {
            e=read();
            addd(a,b,c,d,e);
        }
        else
        {
            write(askk(a,b,c,d));
            putchar(\n);
        }
    }
    return 0;
}

 

JOIOI上帝造题的七分钟(二维树状树组区间修改、区间查询)(2020.7.3)

原文:https://www.cnblogs.com/pengwenbangBlog/p/13231652.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!