2019HDU多校 Round9
时间:2019-08-19
本文章向大家介绍2019HDU多校 Round9,主要包括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; }
原文地址:https://www.cnblogs.com/lwqq3/p/11379663.html
- [C#7] 1.Tuples(元组)
- 防止“rm-rf/”误删除的5种方法
- 基于DotNetOpenAuth实现OpenID 服务提供者
- .NET 和Java 对象 XML序列化 库WOX
- jquery mobile 移动web(6)
- IIS6 间歇性的发生500错误的解决方法
- 产品之上的世界观
- 使用Windows 7中的库
- WordPress 开发之让浏览器自动加载最新的CSS、JS文件(免刷新缓存)
- [C#6] 0-概览
- 移植Windows自宿主WCF服务到Linux/Mono2.8
- IISWeb应用防火墙WAF
- WordPress 开发之让浏览器自动加载最新的CSS、JS文件(免刷新缓存)
- 在Windows 7无法通过UNC路径连接到共享文件夹的解决方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter基础widgets教程-cupertinoActivityIndicator篇
- Flutter基础widgets教程-Align篇
- 深入理解Linux内核进程上下文切换
- 面对疾风吧!io_uring 优化 nginx 实战演练
- 奇技淫巧:在 ssh 里面把服务器的文本复制到本地电脑
- 【计算机网络】学习笔记,第一篇:概述(谢希仁版)
- 【Objective-C】Objective-C语言的动态性
- Python解构与封装
- 关于内网穿透:NPS神器
- 【填坑系列】Python习题集
- Facebook 新一代 React 状态管理库 Recoil
- Adminer 简单的利用
- Xserver免脱壳解密APP
- Flask 入门系列教程(三)
- 数据分析入门系列教程-微博热点