博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客寒假算法基础集训营6 E:海啸(二维树状数组 or 前缀和 +容斥定理)
阅读量:3898 次
发布时间:2019-05-23

本文共 2352 字,大约阅读时间需要 7 分钟。

【题目】

【题解】

法一:

树状数组(单点更新区间查询)板子题,就是1≤n×m≤10^6这个数据范围让我懵了下,用vector容器就好了。

如果大于等于d就等于单点更新1,看做是二维区间查询和即可。

法二:

啧啧,不好意思给我写麻烦了,其实做两次前缀和即可。(比如a[2][2]里存的就是a[1][1]+a[1][2]+a[2][1]+a[2][2]的值。)

区间查询用到了容斥定理哦。

【法一】

#include
#define mem(a,b) memset(a,b,sizeof(a))#define Pi acos(-1)#define eps 1e-8using namespace std;typedef long long ll;const int maxn=1e6+5;#define lowbit(x) x&(-x)vector
ve[maxn];vector
vec[maxn];ll n,m;void add(ll x,ll y,ll val){ while(x<=n) { for(ll i=y;i<=m;i+=lowbit(i)) { vec[x][i]+=val; } x+=lowbit(x); }}ll sum(ll x,ll y){ ll res=0; while(x>0) { for(ll i=y;i>0;i-=lowbit(i)) res+=vec[x][i]; x-=lowbit(x); } return res;}ll query(ll x1,ll y1,ll x2,ll y2){ return sum(x2,y2)+sum(x1-1,y1-1)-sum(x2,y1-1)-sum(x1-1,y2);}int main(){ ll d; scanf("%lld%lld%lld",&n,&m,&d); ll xx,q; for(ll i=1;i<=n;i++) { ve[i].push_back(0),vec[i].push_back(0); for(ll j=1;j<=m;j++) { scanf("%lld",&xx); ve[i].push_back(xx); vec[i].push_back(0); } } for(ll i=1;i<=n;i++) for(ll j=1;j<=m;j++) { //printf("%lld\n",ve[i][j]); if(ve[i][j]>=d) add(i,j,1); } scanf("%lld\n",&q); ll a,b,x,y; while(q--) { scanf("%lld%lld%lld%lld",&a,&b,&x,&y); printf("%lld\n",query(a,b,x,y)); } return 0;}

【法二】

#include
#define mem(a,b) memset(a,b,sizeof(a))#define Pi acos(-1)#define eps 1e-8using namespace std;typedef long long ll;const int maxn=1e6+5;vector
vec[maxn];ll n,m;ll query(ll x1,ll y1,ll x2,ll y2){ return vec[x2][y2]+vec[x1-1][y1-1]-vec[x2][y1-1]-vec[x1-1][y2];}int main(){ ll d; scanf("%lld%lld%lld",&n,&m,&d); ll xx,q; for(ll j=0;j<=m;j++) vec[0].push_back(0); for(ll i=1;i<=n;i++) { vec[i].push_back(0); for(ll j=1;j<=m;j++) { scanf("%lld",&xx); if(xx>=d) xx=1; else xx=0; xx+=vec[i][j-1]; vec[i].push_back(xx); } } for(ll i=2;i<=n;i++) for(ll j=1;j<=m;j++) vec[i][j]+=vec[i-1][j]; scanf("%lld\n",&q); ll a,b,x,y; while(q--) { scanf("%lld%lld%lld%lld",&a,&b,&x,&y); printf("%lld\n",query(a,b,x,y)); } return 0;}

 

转载地址:http://tfben.baihongyu.com/

你可能感兴趣的文章
Liferay配置文件Tag标签参考
查看>>
JavaLiferay研究之十六:FCKeditor如何插入服务器上的资源?
查看>>
Liferay研究之十二:对Liferay框架的几点分析总结 收藏
查看>>
Eclipse快捷键大全(转载)
查看>>
Google爬虫如何抓取JavaScript的?
查看>>
SAP HANA SQL/MDX及TCP/IP端口介绍
查看>>
SAP HANA使用XS和HTTP创建proxy
查看>>
SAP HANA SLT在表中隐藏字段并传入HANA的方法
查看>>
SAP HANA关于触发器的深入理解
查看>>
CSDN要求必须绑定手机号
查看>>
SAP HANA查看某一用户最后登录时间及无效连接次数
查看>>
讲讲BW/4 HANA和BW on HANA的区别
查看>>
SAP HANA CREATE SCHEMA
查看>>
SAP HANA CREATE TABLE
查看>>
SAP HANA CREATE USER
查看>>
SAP HANA index type
查看>>
SAP HANA SQL GROUP BY / ORDER BY / OVER / CASE
查看>>
重学C++之路_#1_概述_总体介绍
查看>>
重学C++之路_#1_基础用法
查看>>
重学C++之路_#1_异常处理
查看>>