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 ...
随机推荐
- 【JavaWeb】JSP 页面
JSP 页面 简介 JSP(Java Server Pages),即 Java 的服务器页面.它的主要作用是代替 Servlet 程序回传 HTML 页面的数据,因为 Servlet 程序回传 HTM ...
- PHP MySQLi extension is not loaded
PHP MySQLi extension is not loaded 如何解决呢? yum -y install mysqli.so huozhe yum -y install php-mysql
- 【Linux】if中的逻辑运算符怎么在linux的帮助中看到
今天在写shell的时候,突然想查看下if相关的一些逻辑运算的,像-f -d之类的这种 于是man if 或者if --help 可是返回的信息却都无济于事,一点帮助都没有 回想一下,if中调的判断 ...
- C#数组的 Length 和 Count()
C#数组的 Length 和 Count() C# 数组中 Length 表示数组项的个数,是个属性.而 Count() 也是表示项的个数,是个方法,它的值和 Length 一样.但实际上严格地说, ...
- LeetCode563. 二叉树的坡度
题目 1 class Solution { 2 public: 3 int ans = 0; 4 int findTilt(TreeNode* root) { 5 postOrder(root); 6 ...
- logicaldisk本地磁盘管理
在网上搜了很多,但是基本都是一样的,差不多都是互相转载摘抄,就那么几个寥寥无几的例子,所以我冒了很大的风险,自己经过多次的测试,对这个命令有了一些新的认识!拿出来分享一下! LOGICALDISK ...
- 计算机网络安全 —— 非对称加密算法 RSA 和数字签名(二)
一.非对称加密算法基本概念 在对称密钥系统中,两个参与者要共享同一个秘密密钥.但怎样才能做到这一点呢?一种是事先约定,另一种是用信使来传送.在高度自动化的大型计算机网络中,用信使来传送密钥显然是不合适 ...
- Vue中组件间通信的方式
Vue中组件间通信的方式 Vue中组件间通信包括父子组件.兄弟组件.隔代组件之间通信. props $emit 这种组件通信的方式是我们运用的非常多的一种,props以单向数据流的形式可以很好的完成父 ...
- (003)每日SQL学习:普通视图和物化视图
关于这一点一直就是很懵懂的状态,今天特意网上查了一下资料,以下摘抄网上比较好的答案.以作记录. 普通视图和物化视图的区别答曰:普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,首先明白基本 ...
- javamail发送邮件,支持yahoo,google,163.com,qq.com邮件发送
https://www.iteye.com/blog/fangyunfeng-1847352 https://blog.csdn.net/weixin_38465623/article/details ...