[Codeforces Round #433][Codeforces 853C/854E. Boredom]
题目链接:853C - Boredom/854E - Boredom
题目大意:在\(n\times n\)的方格中,每一行,每一列都恰有一个被标记的方格,称一个矩形为漂亮的当且仅当这个矩形有两个角是被标记的方格(这样的矩形有\(\frac{n(n-1)}{2}\)个)。给出\(q\)组询问,询问为一个二维区间,问有多少个漂亮的矩形与之相交。
题解:考虑每一个询问,将题中的方格分为如图所示9个区间
每个区间上的数字表示该区间内包含的被标记的点的个数,其中B[1]是询问的区域,为闭区间
将这些区间标记出来后,经过分类讨论即可得出答案
询问区间内点的个数可以通过二维树状数组来解决,但在这题里空间是肯定不够的,所以需要对询问离散化处理,然后离线做
#include<bits/stdc++.h>
using namespace std;
#define N 200001
struct rua{
int l,u,r,d,id,a[],b[],c[];
void read(){scanf("%d%d%d%d",&l,&u,&r,&d);}
long long get()
{
long long res=;
a[]-=a[],a[]-=a[];
b[]-=b[],b[]-=b[];
c[]-=c[],c[]-=c[];
for(int i=;i<;i++)c[i]-=b[i],b[i]-=a[i];
res+=1ll*a[]*(b[]+c[]+b[]+c[]);
res+=1ll*a[]*(b[]+c[]+b[]+c[]+b[]+c[]);
res+=1ll*a[]*(b[]+c[]+b[]+c[]);
res+=1ll*c[]*(b[]+b[]);
res+=1ll*c[]*(b[]+b[]+b[]);
res+=1ll*c[]*(b[]+b[]);
res+=1ll*b[]*(b[]+b[]);
res+=1ll*b[]*b[];
res+=1ll*b[]*(b[]-)/2ll;
return res;
}
}q[N];
int n,m,p[N],t[N];
long long ans[N];
queue<int>Q;
int lowbit(int x){return x&(-x);}
bool cmp1(rua x,rua y){return x.l<y.l;}
bool cmp2(rua x,rua y){return x.r<y.r;}
void change(int x){while(x<N)t[x]++,x+=lowbit(x);}
int ask(int x){int res=;while(x>)res+=t[x],x-=lowbit(x);return res;}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&p[i]);
for(int i=;i<=m;i++)
q[i].read(),q[i].id=i;
sort(q+,q+m+,cmp1);
int cur=;
for(int i=;i<=m;i++)
{
while(cur<q[i].l)change(p[cur]),cur++;
q[i].a[]=ask(q[i].u-),
q[i].a[]=ask(q[i].d),
q[i].a[]=ask(N-);
}
cur=;
sort(q+,q+m+,cmp2);
memset(t,,sizeof(t));
for(int i=;i<=m;i++)
{
while(cur<q[i].r)cur++,change(p[cur]);
q[i].b[]=ask(q[i].u-),
q[i].b[]=ask(q[i].d),
q[i].b[]=ask(N-);
}
for(int i=cur+;i<=n;i++)change(p[i]);
for(int i=;i<=m;i++)
q[i].c[]=ask(q[i].u-),
q[i].c[]=ask(q[i].d),
q[i].c[]=ask(N-);
for(int i=;i<=m;i++)
{
int x=q[i].id;
ans[x]+=q[i].get();
}
//for(int i=1;i<=m;i++)
//for(int j=0;j<3;j++)
//printf("%d %d %d\n",q[i].a[j],q[i].b[j],q[i].c[j]);
for(int i=;i<=m;i++)
printf("%I64d\n",ans[i]);
}
在我的代码中,是先考虑了漂亮矩形的左边界在\(l\)左边的情况,然后加上整体在\(l\)的右边且右边界在\(r\)右边的漂亮矩形数,最后加上整体在\([l,r]\)中的矩形个数
[Codeforces Round #433][Codeforces 853C/854E. Boredom]的更多相关文章
- Codeforces Round #433 (Div. 2)【A、B、C、D题】
题目链接:Codeforces Round #433 (Div. 2) codeforces 854 A. Fraction[水] 题意:已知分子与分母的和,求分子小于分母的 最大的最简分数. #in ...
- DP Codeforces Round #260 (Div. 1) A. Boredom
题目传送门 /* 题意:选择a[k]然后a[k]-1和a[k]+1的全部删除,得到点数a[k],问最大点数 DP:状态转移方程:dp[i] = max (dp[i-1], dp[i-2] + (ll) ...
- 递推DP Codeforces Round #260 (Div. 1) A. Boredom
题目传送门 /* DP:从1到最大值,dp[i][1/0] 选或不选,递推更新最大值 */ #include <cstdio> #include <algorithm> #in ...
- 【Codeforces Round #433 (Div. 1) C】Boredom(二维线段树)
[链接]我是链接 [题意] 接上一篇文章 [题解] 接(点我进入)上一篇文章. 这里讲一种用类似二维线段树的方法求矩形区域内点的个数的方法. 我们可以把n个正方形用n棵线段树来维护. 第i棵线段树维护 ...
- 【Codeforces Round #433 (Div. 1) C】Boredom(树状数组)
[链接]h在这里写链接 [题意] 给你一个n*n的矩阵. 其中每一列都有一个点. 任意两个点构成了矩形的两个对角点 ->即任意两个点确定了一个矩形. ->总共能确定n*(n-1)/2个矩形 ...
- Codeforces Round #260 (Div. 1) A - Boredom DP
A. Boredom Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/455/problem/A ...
- Codeforces Round #260 (Div. 1) A. Boredom (简单dp)
题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...
- Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)
A. Fraction 题目链接:http://codeforces.com/contest/854/problem/A 题目意思:给出一个数n,求两个数a+b=n,且a/b不可约分,如果存在多组满足 ...
- Codeforces Round #260 (Div. 2)C. Boredom(dp)
C. Boredom time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
随机推荐
- SQL Server 数据库编程技巧
Ø 简介 本文主要介绍 SQL Server 数据库在平常的开发中,可能会涉及到的编程技巧,主要包含以下内容: 1. 解决 SQL Server 不支持 127.0.0.1 登录 2. 查询 ...
- LINUX 常用命令(一)
1.LINUX系统常用命令实例: A0 LINUX命令分内置命令和非内置命令! 一般而言,内置命令就是指在/bin ./usr/bin下系统默认的命令! 非内置命令需要加上命令的绝对路径执行!比如我们 ...
- DUMP4 企业级电商项目 —— 对接支付宝扫码支付
延展 <谈谈微信支付曝出的漏洞> [联调 DEMO下载地址]https://docs.open.alipay.com/194/105201/ [内置 一份 说明文档可做参考] [impor ...
- Python3:关于列表的操作(合并、拼接,嵌套排序··)
一:# 将2个列表合并成字典,按最少个数key=['winnie','anna','lisa']value=[18,20,22] k_v=dict(zip(key,value))print(k_v) ...
- MySql常见约束
含义:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性. 分类:六大约束 1.NOT NULL :非空,用于保证该字段的值不能为空.例如学生表的学生姓名及学号等等. 2.DEFAULT: ...
- 华为交换机配置stelnet登陆的实例
作者:邓聪聪 为满足等堡安全要求,对测评对象的交换机做安全登陆的限制 :开启ssh的服务 stelnet server enable :#创建认证用户的用户名和密码 aaa local-user te ...
- JDBC连接MariaDB:数据传输加密
环境:win7+springboot+mybatis+mariadb 需求说明: 未做安全加固前用wireshark抓包: 可以很明显看到用户名.数据库和 SQL,这种情况是有安全风险的. 1.下载o ...
- 【原创】大叔问题定位分享(9)oozie提交spark任务报 java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/KafkaProducer
oozie中支持很多的action类型,比如spark.hive,对应的标签为: <spark xmlns="uri:oozie:spark-action:0.1"> ...
- 解构声明(Destructuring Declarations)
解构声明的概念和作用 把一个对象成员解构(destructure)成多个变量,称为解构声明(destructuring declaration). component1(),component2()等 ...
- 轮播swiper配置选项
本文主要介绍了swiper配置选项,包含了轮播的无限滚动.懒加载.监听当前位置.上下翻页.过渡动画渐变.延时加载图片.自动轮播等: swiper官方链接DEMO <!DOCTYPE html&g ...