Soul Artis

【题目链接】Soul Artis

【题目类型】二维BIT

&题解:

二维区间更新和一维相比,要容斥一下,更新一块区间就是更新4个点.

还有这个我先是写了2*n2logn的算法,结果t了,想了想优化了一下,变成了n2logn,就A了,终于知道了常数的重要性 0.0

&代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define ll long long
const int maxn = 4e3 + 7;
int bit[maxn][maxn];
int Sum(int x, int y) {
int ans = 0;
for (int i = x; i > 0; i -= i&-i) {
for (int j = y; j > 0; j -= j&-j) {
ans += bit[i][j];
}
}
return ans;
}
void Add(int x, int y, int z) {
for (int i = x; i < maxn; i += i&-i) {
for (int j = y; j < maxn; j += j&-j) {
bit[i][j] += z;
}
}
}
void Update(int x1, int y1, int x2, int y2, int z) {
Add(x1, y1, z);
Add(x2 + 1, y1, -z);
Add(x1, y2 + 1, -z);
Add(x2 + 1, y2 + 1, z);
}
int n,m,q;
int main() {
freopen("E:1.in", "r", stdin);
iostream::sync_with_stdio(false),cin.tie(0),cout.tie(0);
while(cin>>n>>m>>q) {
memset(bit,0,sizeof(bit));
int x,y,r;
for(int i=0; i<q; i++) {
cin>>x>>y>>r;
Update(x-r-y+2000,x-r+y,x+r-y+2000,x+r+y,1);
}
int ma=0,te=0,num=0;
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
int d=Sum(i-j+2000,i+j);
ma=max(ma,d);
if(ma!=te) {
num=0;
te=ma;
}
if(d==ma) {
num++;
}
}
}
cout<<ma<<" "<<num<<endl;
}
return 0;
}

whu 643 Soul Artist(二维BIT 区间更新,单点查询)的更多相关文章

  1. HDU.1556 Color the ball (线段树 区间更新 单点查询)

    HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...

  2. codevs 1081 线段树练习 2 区间更新 单点查询 无lazy

    题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所有数都增加X 2:询问第i个数是什么? 输入描述 Input Description 第一行一个正整数n,接下来n行n ...

  3. CDOJ 1059 秋实大哥与小朋友 STL(set)+离散化+BIT区间更新单点查询

    链接: A - 秋实大哥与小朋友 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Subm ...

  4. 【poj2155】Matrix(二维树状数组区间更新+单点查询)

    Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...

  5. NBOJv2 1050 Just Go(线段树/树状数组区间更新单点查询)

    Problem 1050: Just Go Time Limits:  3000 MS   Memory Limits:  65536 KB 64-bit interger IO format:  % ...

  6. hdu1556 树状数组区间更新单点查询板子

    就是裸的区间更新: 相对于直观的线段树的区间更新,树状数组的区间更新原理不太相同:由于数组中的一个结点控制的是一块区间,当遇到更新[l,r]时,先将所有能控制到 l 的结点给更新了,这样一来就是一下子 ...

  7. hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询

    点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ...

  8. HDU 5861 Road 线段树区间更新单点查询

    题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5861 Road Time Limit: 12000/6000 MS (Java/Othe ...

  9. ZOJ 1610 Count the Colors【题意+线段树区间更新&&单点查询】

    任意门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1610 Count the Colors Time Limit: 2 ...

随机推荐

  1. MySQL获取分组后的TOP 1和TOP N记录-转

    有时会碰到一些需求,查询分组后的最大值,最小值所在的整行记录或者分组后的top n行的记录,在一些别的数据库可能有窗口函数可以方面的查出来,但是MySQL没有这些函数,没有直接的方法可以查出来,可通过 ...

  2. angular 表单元素的使用总结

    工作中form表单元素最常用的是input,问题没有太多,现在总结下select ,radio组,checkbox的使用 1 select 常用的使用方式,如下 var Cityis = [{id:0 ...

  3. android 平台签名

    特定程序为了获取平台的权限,需要用平台签名 可以用 build/target/product 下的私钥来签名 bat代码如下: java -jar signapk.jar emt100d\platfo ...

  4. 运行或开发.NET Core 的先决条件(支持项目、依赖项)

    Windows 上 .NET Core 的先决条件 https://docs.microsoft.com/zh-cn/dotnet/core/windows-prerequisites?tabs=ne ...

  5. React Native开源项目如何运行(转载)

    学习任何技术,最快捷的方法就是学习完基础语法,然后模仿开源项目进行学习,React Native也不例外.React Native推出了1年多了, 开源项目太多了,我们以其中一个举例子.给大家演示下如 ...

  6. Appium入门(3)__ Appium Server安装

    安装Appium 1.下载并安装:https://bitbucket.org/appium/appium.app/downloads/ 2. 系统变量PATH 增加 C:\Program Files ...

  7. 【Python全栈-JavaScript】JavaScript入门

    JavaScript基础知识点 一.JavaScript概述 参考:http://www.w3school.com.cn/b.asp JavaScript的历史 1.1992年Nombas开发出C-m ...

  8. kali蓝牙连接

    http://blog.csdn.net/hailangnet/article/details/47723181 http://www.aiuxian.com/article/p-3012084.ht ...

  9. 从网络上筛选"流媒体"的相关文章

    1> 雷神的博客专栏https://blog.csdn.net/leixiaohua1020 [总结]FFMPEG视音频编解码零基础学习方法https://blog.csdn.net/leixi ...

  10. 安装 Samba服务

    参考摘录的是博客园的文章:https://www.cnblogs.com/zhaopengcheng/p/5481048.html ubuntu系统:16.04 1. 首先用管理员权限创建一个新用户, ...