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的更多相关文章

  1. HDU6578 2019HDU多校训练赛第一场 1001 (dp)

    HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...

  2. HDU6579 2019HDU多校训练赛第一场1002 (线性基)

    HDU6579 2019HDU多校训练赛第一场1002 (线性基) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6579 题意: 两种操作 1.在序列末 ...

  3. 2019HDU多校第一场1001 BLANK (DP)(HDU6578)

    2019HDU多校第一场1001 BLANK (DP) 题意:构造一个长度为n(n<=10)的序列,其中的值域为{0,1,2,3}存在m个限制条件,表示为 l r x意义为[L,R]区间里最多能 ...

  4. 2019HDU多校训练第三场 Planting Trees 暴力 + 单调队列优化

    题意:有一个n * n的网格,每个网格中间有一颗树,你知道每棵树的高,你可以选择一个矩形区域把里面的树都围起来,但是矩形区域里面任意两棵树的高度差的绝对值不超过m,问这个矩形的最大面积是多少? 思路: ...

  5. 2019HDU多校第九场 Rikka with Quicksort —— 数学推导&&分段打表

    题意 设 $$g_m(n)=\begin{cases}& g_m(i) = 0,     \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ...

  6. 2019HDU多校第7场——构造

    题意 假设现在你在准备考试,明天的考试有 $n$ 道题目,对于分值为 $i$ 的题目至少复习 $i+1$ 小时才能做对,已知总分为$m$,求确保完成 $k$ 道题的最少时间. 分析 手动尝试一下,发现 ...

  7. 2019HDU多校第六场1009 Three Investigators——杨表

    题意 给定一个 n 个元素的数列,从前 k 个元素中取5次不下降子序列,求取得的和的最大值(k从1至n) 分析 考虑将数字 a[i] 拆成 a[i] 个 a[i],比如 “4,1,2”→“4,4,4, ...

  8. 2019HDU多校第六场 6641 TDL——乱搞&&思维题

    题意 设 $f(n, m)$ 为大于 $n$ 且与 $n$ 互质的数中第 $m$ 小的数,求满足 $(f(n, m) - n) \oplus n = k$ 的最小正整数 $n$ 分析 因为 $m \l ...

  9. 2019HDU多校第五场A fraction —— 辗转相除法|类欧几里得

    题目 设 $ab^{-1} = x(mod \ p)$,给出 $x,p$,要求最小的 $b$,其中 $0< a < b, \ 1 < x<p,\ 3 \leq x\leq {1 ...

随机推荐

  1. 人生苦短我用Python,本文助你快速入门

    目录 前言 Python基础 注释 变量 数据类型 浮点型 复数类型 字符串 布尔类型 类型转换 输入与输出 运算符 算术运算符 比较运算符 赋值运算符 逻辑运算符 if.while.for 容器 列 ...

  2. 为了加快速度,Redis都做了哪些“变态”设计

    前言 列表对象是 Redis 中 5 种基础数据类型之一,在 Redis 3.2 版本之前,列表对象底层存储结构有两种:linkedlist(双端列表)和 ziplist(压缩列表),而在 Redis ...

  3. 【EXP】导出数据库dmp文件,只有几张表有数据,剩下的所有表只有表结构没有数据

    导出一个dmp,指定的表中有数据,其他的表只有表结构, 有数据的表只有几张,分别是A,B,C三张表,剩下的表都没有数据 思路: 导出一个111.dmp,所有的表都只是表结构 将111.dmp导入到新创 ...

  4. pandas 写csv 操作

    pandas 写csv 操作 def show_history(self): df = pd.DataFrame() df['Time'] = pd.Series(self.time_hist) df ...

  5. [工作札记]03: 微软Winform窗体中ListView、DataGridView等控件的Bug,会导致程序编译失败,影响范围:到最新的.net4.7.2都有

    工作中,我们发现了微软.net WinForm的一个Bug,会导致窗体设计器自动生成的代码失效,这个Bug从.net4.5到最新的.net4.7.2都存在,一直没有解决.最初是我在教学工作中发现的,后 ...

  6. 使用EFCore连接Oracle数据库时出现的问题

    问题 System.TypeLoadException: Method 'Create' in type 'Oracle.EntityFrameworkCore.Infrastructure.Inte ...

  7. PCB导线长宽与电源压降

    为了计算PCB中电源线走线后的压降,需要知道PCB中使用的铜的电阻率, PCB板中的铜是直接贴上去的铜箔,因此可以当成纯铜(我问了PCB打样的厂家他们的铜的电阻率,但是他们给我说不知道,所以干脆就当成 ...

  8. Numpy的一些学习记录

    Numpy的一些记录 产生numpy.array的方式 import numpy as np arr1 = np.array([1, 2, 3]) print(arr1) arr2 = np.zero ...

  9. SQL函数知识点

    SQL函数知识点 SQL题目(一) 1.查询部门编号为10的员工信息 select*from emp where empno=10; 2.查询年薪大于3万的人员的姓名与部门编号 select enam ...

  10. MySQL 压测

    https://mp.weixin.qq.com/s/vKJZp5cGUetHokGh2EZUXg mysqlslap --iterations=100 --create-schema='test' ...