2019HDU多校 Round9
Solved:3
02 Rikka with Cake (树状数组)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll; int n, m, K;
int cntx, cnty, cntl, cntr, cntu, cntd;
struct node {
int x, y, tx, ty;
char dir;
}E[100005];
node L[100005], R[100005], U[100005], D[100005];
int idx[100005];
int idy[100005];
char s[5]; bool cmp1(node A, node B) {
return A.x < B.x;
}
bool cmp2(node A, node B) {
return A.y < B.y;
}
bool cmp3(node A, node B) {
return A.y > B.y;
} int sum[100005];
void add(int k) {
for(int i = k; i <= 100000; i += (i & -i)) sum[i]++;
}
int query(int k) {
int res = 0;
for(int i = k; i >= 1; i -= (i & -i)) res += sum[i];
return res;
} int main() {
int T;
scanf("%d", &T);
while(T--) {
cntx = cnty = cntl = cntr = cntu = cntd = 0;
scanf("%d%d%d", &n, &m, &K);
for(int i = 1; i <= K; i++) {
scanf("%d%d", &E[i].x, &E[i].y);
scanf("%s", s + 1); E[i].dir = s[1];
}
sort(E + 1, E + 1 + K, cmp1);
for(int i = 1; i <= K; i++) {
if(E[i].x != E[i - 1].x) E[i].tx = ++cntx;
else E[i].tx = cntx;
}
sort(E + 1, E + 1 + K, cmp2);
for(int i = 1; i <= K; i++) {
if(E[i].y != E[i - 1].y) E[i].ty = ++cnty;
else E[i].ty = cnty;
}
for(int i = 1; i <= K; i++) {
if(E[i].dir == 'U') U[++cntu] = E[i];
else if(E[i].dir == 'D') D[++cntd] = E[i];
else if(E[i].dir == 'L') L[++cntl] = E[i];
else if(E[i].dir == 'R') R[++cntr] = E[i];
}
sort(L + 1, L + 1 + cntl, cmp3);
sort(R + 1, R + 1 + cntr, cmp3);
sort(U + 1, U + 1 + cntu, cmp3);
memset(sum, 0, sizeof(sum)); ll ans = 0;
int tt = 1;
for(int i = 1; i <= cntu; i++) {
while(L[tt].ty >= U[i].ty && tt <= cntl) {
add(L[tt].tx);
tt++;
}
ans += 1LL * (query(100000) - query(U[i].tx - 1));
} tt = 1;
memset(sum, 0, sizeof(sum));
for(int i = 1; i <= cntu; i++) {
while(R[tt].ty >= U[i].ty && tt <= cntr) {
add(R[tt].tx);
tt++;
}
ans += 1LL * query(U[i].tx);
} sort(D + 1, D + 1 + cntd, cmp2);
sort(L + 1, L + 1 + cntl, cmp2);
sort(R + 1, R + 1 + cntr, cmp2);
tt = 1;
memset(sum, 0, sizeof(sum));
for(int i = 1; i <= cntd; i++) {
while(L[tt].ty <= D[i].ty && tt <= cntl) {
add(L[tt].tx);
tt++;
}
ans += 1LL * (query(100000) - query(D[i].tx - 1));
} tt = 1;
memset(sum, 0, sizeof(sum));
for(int i = 1; i <= cntd; i++) {
while(R[tt].ty <= D[i].ty && tt <= cntr) {
add(R[tt].tx);
tt++;
}
ans += 1LL * query(D[i].tx);
}
printf("%lld\n", ans + 1LL);
}
return 0;
}
Rikka with Cake
2019HDU多校 Round9的更多相关文章
- HDU6578 2019HDU多校训练赛第一场 1001 (dp)
HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...
- HDU6579 2019HDU多校训练赛第一场1002 (线性基)
HDU6579 2019HDU多校训练赛第一场1002 (线性基) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6579 题意: 两种操作 1.在序列末 ...
- 2019HDU多校第一场1001 BLANK (DP)(HDU6578)
2019HDU多校第一场1001 BLANK (DP) 题意:构造一个长度为n(n<=10)的序列,其中的值域为{0,1,2,3}存在m个限制条件,表示为 l r x意义为[L,R]区间里最多能 ...
- 2019HDU多校训练第三场 Planting Trees 暴力 + 单调队列优化
题意:有一个n * n的网格,每个网格中间有一颗树,你知道每棵树的高,你可以选择一个矩形区域把里面的树都围起来,但是矩形区域里面任意两棵树的高度差的绝对值不超过m,问这个矩形的最大面积是多少? 思路: ...
- 2019HDU多校第九场 Rikka with Quicksort —— 数学推导&&分段打表
题意 设 $$g_m(n)=\begin{cases}& g_m(i) = 0, \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ...
- 2019HDU多校第7场——构造
题意 假设现在你在准备考试,明天的考试有 $n$ 道题目,对于分值为 $i$ 的题目至少复习 $i+1$ 小时才能做对,已知总分为$m$,求确保完成 $k$ 道题的最少时间. 分析 手动尝试一下,发现 ...
- 2019HDU多校第六场1009 Three Investigators——杨表
题意 给定一个 n 个元素的数列,从前 k 个元素中取5次不下降子序列,求取得的和的最大值(k从1至n) 分析 考虑将数字 a[i] 拆成 a[i] 个 a[i],比如 “4,1,2”→“4,4,4, ...
- 2019HDU多校第六场 6641 TDL——乱搞&&思维题
题意 设 $f(n, m)$ 为大于 $n$ 且与 $n$ 互质的数中第 $m$ 小的数,求满足 $(f(n, m) - n) \oplus n = k$ 的最小正整数 $n$ 分析 因为 $m \l ...
- 2019HDU多校第五场A fraction —— 辗转相除法|类欧几里得
题目 设 $ab^{-1} = x(mod \ p)$,给出 $x,p$,要求最小的 $b$,其中 $0< a < b, \ 1 < x<p,\ 3 \leq x\leq {1 ...
随机推荐
- .net core 中使用Log4net输出日志到Mysql数据库中
.net core 中使用Log4net输出日志到数据库中去 1.使用Nuget安装log4net 和 mysql.data 2.设置log4net 的配置文件 log4net.config 可以设置 ...
- 【JavaWeb】XML 文件
XML 文件 简介 XML 是可拓展的标记性语言. XML 的主要作用: 用来保存数据,且这些数据具有自我描述性: 作为项目或模块的配置文件: 作为网络数据传输的格式,但是现在以 JSON 格式为主. ...
- 【Redis3.0.x】持久化
Redis3.0.x 持久化 概述 Redis 提供了两种不同的持久化方式: RDB(Redis DataBase)持久化,可以在指定的时间间隔内生成数据集的时间点快照. AOF(Append Onl ...
- Java 设置Excel条件格式(高亮条件值、应用单元格值/公式/数据条等类型)
概述 在Excel中,应用条件格式功能可以在很大程度上改进表格的设计和可读性,用户可以指定单个或者多个单元格区域应用一种或者多种条件格式.本篇文章,将通过Java程序示例介绍条件格式的设置方法,设置条 ...
- C语言实现蛇形矩阵
今天大一考试C语言的时候看见了这道题,下面是我转载的一个大佬的博客,自认为分析的很清楚,特来分享一下. **原文地址: https://blog.csdn.net/jack22333/article/ ...
- 【Linux】使用cryptsetup加密磁盘 策略为LUKS
LUKS(Linux Unified Key Setup)为Linux硬盘分区加密提供了一种标准,它不仅能通用于不同的Linux发行版本,还支持多用户/口令.因为它的加密密钥独立于口令,所以如果口令失 ...
- web dynpro配置注意事项
如果你想使用web dynpro 开发的应用,但是发现浏览器报错,那么你按照下面的步骤逐一进行检查吧.特别是返回的500错误,或者是你发现浏览器的地址栏中以http://<hostname> ...
- spring boot 集成 websocket 实现消息主动
来源:https://www.cnblogs.com/leigepython/p/11058902.html pom.xml 1 <?xml version="1.0" en ...
- 解决ubuntu获取root账号并开通ssh
1.设置root密码 sudo passwd root 2.修改etc/ssh/sshd_config文件 su - root vi /etc/ssh/sshd_config LoginGraceTi ...
- Spring Boot(IDEA,Gradle)超详细用户管理项目(一)——Hello World
1.构建工具的配置(Gradle):自定义-所有设置:构建.执行.部署-构建工具-Gradle: 设置Gradle用户主目录:(该目录相当于仓库,gradle将下载所需依赖到此目录下),此目录下可新建 ...