本题的主要算法就是区间更新和区间求和;

可以用线段树和树状数组来做;

感觉线段树写的太麻烦了,看到官方题解上说可以用树状数组做,觉得很神奇,以前用过的树状数组都是单点维护,区间求和的;

其实树状数组还可以区间维护,单点求值;和区间维护,区间求和的;

详情请见博客

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#define maxn 4000010
#define ll long long
using namespace std; ll a[][maxn];
ll b[][maxn]; void add_a(int flag,int x,ll value)
{
while(x>)
{
a[flag][x]+=value;
x-=x&(-x);
}
} void add_b(int flag,int n,int x,ll value)
{
for(int i=x;i<=n;i+=i&(-i))
b[flag][i]+=x*value;
} ll sum_a(int flag,int n,int x)
{
ll sum=;
while(x<=n)
{
sum+=a[flag][x];
x+=x&(-x);
}
return sum;
} ll sum_b(int flag,int x)
{
ll sum=;
while(x>)
{
sum+=b[flag][x];
x-=x&(-x);
}
return sum;
} ll getsum(int flag,int n,int x)
{
if(x)
return sum_a(flag,n,x)*x+sum_b(flag,x-);
else
{
return ;
}
} int main()
{
int n,m,w;
int comand;
int x1,x2,y1,y2;
int v;
scanf("%d%d%d",&n,&m,&w);
for(int i=; i<w; i++)
{
scanf("%d",&comand);
if(comand==)
{
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&v);
ll vy=v*(y2-y1+);
ll vx=v*(x2-x1+);
add_a(,x2,vy);
add_b(,n,x2,vy);
if(x1>)
{
add_a(,x1-,-vy);
add_b(,n,x1-,-vy);
}
add_a(,y2,vx);
add_b(,m,y2,vx);
if(y1>)
{
add_a(,y1-,-vx);
add_b(,m,y1-,-vx);
}
}
else
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
ll tmp1=getsum(,n,x2)-getsum(,n,x1-);
ll tmp2=getsum(,m,y1-);
ll tmp3=getsum(,m,m)-getsum(,m,y2);
cout<<tmp1-tmp2-tmp3<<endl;
}
}
return ;
}

codeforces 390E Inna and Large Sweet Matrix的更多相关文章

  1. CodeForces 390E Inna and Large Sweet Matrix(树状数组改段求段)

    树状数组仅仅能实现线段树区间改动和区间查询的功能,能够取代不须要lazy tag的线段树.且代码量和常数较小 首先定义一个数组 int c[N]; 并清空 memset(c, 0, sizeof c) ...

  2. Codeforces 390E Inna and Large Sweet Matrix 树状数组改段求段

    题目链接:点击打开链接 题意:给定n*m的二维平面 w个操作 int mp[n][m] = { 0 }; 1.0 (x1,y1) (x2,y2) value for i : x1 to x2 for ...

  3. CF390-E. Inna and Large Sweet Matrix(区间更新+区间查询)

    题意很好理解,不说了 题解就是每次把值压缩成一维,比如x上,这样就可以求出任意宽度的整个竖条的和. 如这张图,求的是s5-(s1+s3+s7+s9) 因为可以求出一整竖条和一整横条,我们可以求出是s2 ...

  4. codeforces C. Inna and Huge Candy Matrix

    http://codeforces.com/problemset/problem/400/C 题意:给你一个n*m的矩阵,然后在矩阵中有p个糖果,给你每个糖果的初始位置,然后经过x次顺时针反转,y次旋 ...

  5. codeforces C. Inna and Huge Candy Matrix 解题报告

    题目链接:http://codeforces.com/problemset/problem/400/C 题目意思:给出一个n行m列的矩阵,问经过 x 次clockwise,y 次 horizontal ...

  6. codeforces 390D Inna and Sweet Matrix

    几个小结论: 1.路径长度=i+j-1; 2.最简单的走法是先横走再竖着走或者先竖着走再横着走 #include<cstdio> #include<cstring> using ...

  7. codeforces round #234B(DIV2) C Inna and Huge Candy Matrix

    #include <iostream> #include <vector> #include <algorithm> #include <utility> ...

  8. codeforces 400 C Inna and Huge Candy Matrix【模拟】

    题意:给出一个矩形的三种操作,顺时针旋转,逆时针旋转,对称,给出原始坐标,再给出操作数,问最后得到的坐标 画一下模拟一下操作就可以找到规律了 #include<iostream> #inc ...

  9. codeforces 374A Inna and Pink Pony 解题报告

    题目链接:http://codeforces.com/problemset/problem/374/A 题目意思:给出一个 n 行  m 列 的棋盘,要将放置在坐标点为(i, j)的 candy 移动 ...

随机推荐

  1. android 按两次返回键退出应用

    private long mExitTime; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCod ...

  2. 【转】做产品VS做项目

    相关定义 根据GB/T19000—2008<质量管理体系基础和术语>,有以下定义 过程process 一组将输入转化为输出的相互关联或相互作用的活动 注:一个过程的输入通常是其他过程的输出 ...

  3. 【C语言】5-结构体

    一.什么是结构体 * 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可 ...

  4. 【转】PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理

    [转]PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理 只要有人用了: select t.* from ...

  5. 使用blktrace排查iowait cpu高的问题

    本文转自这里,blktrace在这种情况下的使用方法值得借鉴学习. ------------------------------------------------------------------ ...

  6. kettle JavaScript脚本

    1.使用获取文件名步骤,获取本地一个目录下的所有 jpg 图片文件.通过java script 步骤,读取这些二进制文件的内容,放到一个字段里, 再通过表输出步骤把文件名字段和文件内容字段写入到数据库 ...

  7. Jquery inArray的使用

    var typeList=["A","B","C","D"]; if ($.inArray("A", ...

  8. 第七篇、CSS3新增属性

    <!-- 1.透明度 opacity(设置不透明度):0.2: --rgba --background-color:rgba(255,0,0,0.8); 2.块阴影和圆角阴影 --box-sha ...

  9. 第六篇、CSS属性

    <!--1.可继承性 visible(可见的):hidden --掩藏,但是结构还保存 cursor(光标样式):pointer(手指)crosshair(十字架) 一般是文字控制属性 内联标签 ...

  10. Curl的编译

    下载 curl的官网:https://curl.haxx.se/ libcurl就是一个库,curl就是使用libcurl实现的. curl是一个exe,也可以说是整个项目的名字,而libcurl就是 ...