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. Hystrix-服务降级-服务熔断-服务限流

    Hystrix简介 Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时.异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致 ...

  2. 微信小程序API交互的自定义封装

    目录 1,起因 2,优化成果 3,实现思路 4,完整代码 1,起因 哪天,正在蚂蚁森林疯狂偷能量的我被boss叫过去,告知我司要做一个线上直播公开课功能的微信小程序,博主第一次写小程序,复习了下文档, ...

  3. binlog-do-db

    如果只是对一个数据库设置,其实没有效果的,其他数据还是会记录binlog的 binlog-ignore-db =database b  binlog日志里面将不会记录database b的所有相关的操 ...

  4. Java调用Linux命令执行

    调用方式 Java调用linux命令执行的方式有两种,一种是直接调用linux命令,一种是将linux命令写到.sh脚本中,然后调用脚本执行. 详细说明 直接调用:使用java中lang包下面的Run ...

  5. ASP.NET Core错误处理中间件[4]: 响应状态码页面

    StatusCodePagesMiddleware中间件与ExceptionHandlerMiddleware中间件类似,它们都是在后续请求处理过程中"出错"的情况下利用一个错误处 ...

  6. const关键字:终于拥有真正的常量声明语句

    本文首发于个人网站:const关键字:终于拥有真正的常量声明语句 你好,今天大叔想和你唠扯唠扯 ES6 新增的关键字 -- const.在说 const 关键字之前,大叔先和你唠唠大叔自己对 cons ...

  7. js模仿京东首页的倒计时功能

    模仿京东首页的倒计时 我们学习了定时器,可以用定时器做一个倒计时,于是我模仿了京东首页倒计时. 先看看京东首页的倒计时. 思路: 如何倒计时? 给一个未来的时间.然后计算未来时间到现在的时间戳. 用定 ...

  8. 转 14 jmeter性能测试实战--数据库MySQL

    14 jmeter性能测试实战--数据库MySQL   需求 测试用户表(对用户表select操作) 测试步骤 1.MySQL驱动下载并安装. 2.测试计划面板点击"浏览"按钮,将 ...

  9. 浅谈自动化构建之grunt

    自动化构建 开发行业的自动化构建 一句话把源代码转化为生产代码,作用是脱离运行环境兼容带来的问题开发阶段使用提高效率的语法,规范 和标准,构建转换那些不被支持的特性转化成能够执行的代码. 一.简单的自 ...

  10. C#高级编程第11版 - 第九章 索引

    [1]9.1 System.String 类 String类中关键的方法.如替换,比较等. [2]9.1.1 构建字符串 1.String类依然有一个缺点:因为它是不可变的数据类型,这意味当你初始化一 ...