题目链接:Problem - 4456

看别人叙述看的心烦,于是我自己画了一张图。

上图。

上代码

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const int maxn = ;
const int maxm = 3e6+; //这里大小的确定应该是80000*log2(20000)*log2(20000),算出来大约是一千三百万,数据应该是水一些,然而看所有人的题解,都是四百万,呵呵呵,这其中一定有什么交易。
int p[maxn],x[maxn],y[maxn],z[maxn];
int arr[maxm];
int cnt[maxm];
int num = ;
int len = ;
int w = ;
int lowbit(int x)
{
return x&(-x);
}
void pre(int x,int y)
{
for(int i=x;i<=w;i+=lowbit(i))
{
for(int j=y;j<=w;j+=lowbit(j))
{
cnt[num++] = i*w+j;
}
}
}
void sum(int x,int y,int tt)
{
for(int i=x;i<=w;i+=lowbit(i))
{
for(int j=y;j<=w;j+=lowbit(j))
{
int id = lower_bound(cnt,cnt+len,i*w+j)-cnt;
arr[id] += tt;
}
}
}
int getsum(int x,int y)
{
x=max(x,); x=min(x,w); //边界
y=max(y,); y=min(y,w);
int summ = ;
for(int i=x;i>;i-=lowbit(i))
{
for(int j=y;j>;j-=lowbit(j))
{
int id = lower_bound(cnt,cnt+len,i*w+j)-cnt;
if(cnt[id]==(i*w+j)) summ += arr[id];
}
}
return summ;
}
int main()
{
int n,m;
while(scanf("%d",&n)!=EOF&&n)
{
scanf("%d",&m);
w = *n;
memset(cnt,,sizeof(cnt));
memset(arr,,sizeof(arr));
num = ;
for(int i=;i<=m;i++)
{
scanf("%d %d %d %d",&p[i],&x[i],&y[i],&z[i]);
int nx = x[i]-y[i]+n;
int ny = x[i]+y[i];
if(p[i]==)
pre(nx,ny);
}
sort(cnt,cnt+num);
len = unique(cnt,cnt+num)-cnt;
for(int i=;i<=m;i++)
{
int nx = x[i]-y[i]+n;
int ny = x[i]+y[i];
if(p[i]==)
{
sum(nx,ny,z[i]);
}
else
{
int x1,y1,x2,y2,x3,y3,x4,y4;
x1 = nx+z[i];y1 = ny+z[i];
x2 = nx+z[i];y2 = ny-z[i];y2--;
x3 = nx-z[i];y3 = ny+z[i];x3--;
x4 = nx-z[i];y4 = ny-z[i];x4--;y4--;
printf("%d\n",getsum(x1,y1)-getsum(x2,y2)-getsum(x3,y3)+getsum(x4,y4));
}
}
}
return ;
}

HDU 4456(二维树状数组+坐标转换)的更多相关文章

  1. hdu 2642 二维树状数组 单点更新区间查询 模板水题

    Stars Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others) Total Subm ...

  2. hdu 2642二维树状数组 单点更新区间查询 模板题

    二维树状数组 单点更新区间查询 模板 从零开始借鉴http://www.2cto.com/kf/201307/227488.html #include<stdio.h> #include& ...

  3. 【 HDU - 4456 】Crowd (二维树状数组、cdq分治)

    BUPT2017 wintertraining(15) #5A HDU 4456 题意 给你一个n行n列的格子,一开始每个格子值都是0.有M个操作,p=1为第一种操作,给格子(x,y)增加z.p=2为 ...

  4. hdu 5517 Triple(二维树状数组)

    Triple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  5. HDU 5517---Triple(二维树状数组)

    题目链接 Problem Description Given the finite multi-set A of n pairs of integers, an another finite mult ...

  6. HDU 5517 【二维树状数组///三维偏序问题】

    题目链接:[http://acm.split.hdu.edu.cn/showproblem.php?pid=5517] 题意:定义multi_set A<a , d>,B<c , d ...

  7. HDU 5465 Clarke and puzzle Nim游戏+二维树状数组

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5465 Clarke and puzzle  Accepts: 42  Submissions: 26 ...

  8. HDU_4456_二维树状数组

    http://acm.hdu.edu.cn/showproblem.php?pid=4456 第一道二维树状数组就这么麻烦,题目要计算的是一个菱形范围内的和,于是可以把原来的坐标系旋转45度,就是求一 ...

  9. HDU1559 最大子矩阵 (二维树状数组)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)  ...

随机推荐

  1. allocator 类

    allcator是一个模板类 定义在memory头文件中,将内存分配与对象构造分开,分配的内存是原始的.未构造的 一.how to use 因其实一个类,则使用allcator时需要首先声明一个类对象 ...

  2. vim编程配置方法

    vim简介Vim 有以下几个模式:1) 正常(normal)模式,缺省的编辑模式:下面如果不加特殊说明,提到的命令都直接在正常模式下输入:任何其它模式中都可以通过键盘上的 Esc 键回到正常模式.2) ...

  3. oracle的exp和imp命令的使用【转载】

    oracle的exp和imp命令的使用     我们通常要对ORACLE的数据进行导入,导出,在没有expdb,impdb以前(10G以前),我们都是使用exp 导出,imp命令来实现导入.   打开 ...

  4. maven 国内镜像地址

    由于连接国外网站时网速特慢,为解决这个问题,os china 建立了一个maven 的私服.为了记忆,特将此记录. settings.xml 设置镜像方法步骤如下: 1. mirrors 设置 < ...

  5. 其他信息: Error creating context 'spring.root': 未能加载文件或程序集“EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项

    详细错误情况: “System.Configuration.ConfigurationErrorsException”类型的异常在 Spring.Core.dll 中发生,但未在用户代码中进行处理 其 ...

  6. Servlet学习三:不允许直接访问jsp处理方式一过滤器

    转自:http://zy19982004.iteye.com/blog/1755189

  7. vs2013安装visual assist和viemu之后提示功能等无效解决

    1.vs2013安装了上面两个软件之后会发生va功能无效,经过一番谷歌百度后找到了解决方案 1.打开注册表 2.直接搜索TrackCaretVisibility这个键值,找到后把他的值修改成00 此篇 ...

  8. Echarts自适应浏览器大小

    var myChart = echarts.init(document.getElementById('sitesChar')); var option = { title : { text: 'No ...

  9. MyBaits 错误分析

    错误原因:在DAO的映射文件中,在映射标签中的type类型写成DAO类了,应该写成javaBean

  10. POJ 3368/RMQ/线段数

    题目链接 /* 给出一段序列,询问[L,R]区间内最大相同数的个数. 用一个很巧妙地方法,转化成求区间内的最大值的问题. RMQ维护区间最大值. MAX处理: */ for(int i=1;i< ...