http://acm.hdu.edu.cn/showproblem.php?pid=6681

交点个数加1就是答案

使用二维偏序计算横竖射线的交点

#include <bits/stdc++.h>
using namespace std;
int T,n,m,k;
struct point {int x,y;int kind;point(int a,int b,int k = 0):x(a),y(b),kind(k) {};
};vector<point>p[5];void input() {int a,b;char s[2];scanf("%d%d%s",&a,&b,s);point pp(a,b);switch(s[0]) {case 'U':pp.kind = 1;p[1].push_back(pp);break;case 'D':pp.kind = 2;p[2].push_back(pp);break;case 'L':pp.kind = 3;p[3].push_back(pp);break;case 'R':pp.kind = 4;p[4].push_back(pp);break;}
}
void init(){for(int i = 1;i<=4;i++){p[i].clear();}
}
bool cmpx(point a,point b){return a.x<b.x;
}
bool cmpy(point a,point b){return a.y<b.y;
}
int c[100005] = {0};
void cinit(){memset(c,0,sizeof(c));
}
int ask(int x){int ans = 0;for(;x;x-=x&-x)ans+=c[x];return ans;
}
void add(int x,int y){for(;x<=100000;x+=x&-x)c[x]+=y;
}
int solve(int a,int b,bool changex,bool changey){///计算每一个b类点的左下方向有几个a类点,返回对每一个b类点计算的和///changex、y表示是否翻转x、y坐标///比如实际计算的是左上方的点,只要翻转y轴就可以转换成计算左下方的点///把a类点和b类点放在一起排序,扫描到a类点时,对树状数组做单点修改,///扫描到b类点时将树状数组的前缀和加到返回值上vector<point> v;v.insert(v.end(),p[a].begin(),p[a].end());v.insert(v.end(),p[b].begin(),p[b].end());if(changex){for(int i = 0;i<(int)v.size();i++){v[i].x = 1e9 - v[i].x;}}if(changey){for(int i = 0;i<(int)v.size();i++){v[i].y = 1e9 - v[i].y;}}sort(v.begin(),v.end(),cmpy);for(int i = 0;i<(int)v.size();i++){v[i].y = i+1;///树状数组存储的是y轴坐标,因为y轴坐标范围很大,所以要先离散化}sort(v.begin(),v.end(),cmpx);cinit();int ret = 0;for(int i = 0;i<(int)v.size();i++){if(v[i].kind == a){add(v[i].y,1);}else{ret+=ask(v[i].y);}}return ret;
}int main() {scanf("%d",&T);while(T--) {init();scanf("%d%d%d",&n,&m,&k);for(int i = 1; i<=k; i++) {input();}int ans = 0;ans += solve(1,3,0,0);ans += solve(1,4,1,0);ans += solve(2,3,0,1);ans += solve(4,2,0,0);printf("%d\n",ans+1);}return 0;
}

HDU6681 二维偏序计算贡献值 树状数组 离散化相关推荐

  1. 51nod 1213 二维曼哈顿距离最小生成树 树状数组+最小生成树

    Description 二维平面上有N个坐标为整数的点,点x1 y1同点x2 y2之间的距离为:横纵坐标的差的绝对值之和,即:Abs(x1 - x2) + Abs(y1 - y2)(也称曼哈顿距离). ...

  2. 斜率小于0的连线数量 51Nod - 1107 (树状数组+离散化)

    二维平面上N个点之间共有C(n,2)条连线.求这C(n,2)条线中斜率小于0的线的数量. 二维平面上的一个点,根据对应的X Y坐标可以表示为(X,Y).例如:(2,3) (3,4) (1,5) (4, ...

  3. POJ 2299 Ultra-QuickSort(树状数组+离散化)

    题目大意: 就是说,给你一个序列,然后让你求出这个序列有多少个逆序对,所谓逆序对就是对于这个序列中的元素有a[i]>a[j] 且i<j存在. 其实原题是这样说的,给你一个序列,让你用最少的 ...

  4. HDU 5792 World is Exploding(树状数组+离散化)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5792 题意: 思路: lmin[i]:表示左边比第i个数小的个数. lmax[i]:表示左边比第i个 ...

  5. HDU - 5877 Weak Pair (dfs序+树状数组+离散化)

    VJ地址 题意:给一个有根树给你,计算一下满足下列条件的序列对的数目 (1)u是v的祖先(不能是它自己) (2)a[v]*a[u]<=k 思路:用DFS序分裂每一条链,使链上的点都是当前加入点的 ...

  6. 2017西安交大ACM小学期数据结构 [树状数组 离散化]

    Problem E 发布时间: 2017年6月28日 12:53   最后更新: 2017年6月29日 21:35   时间限制: 1000ms   内存限制: 64M 描述 给定一个长度为n的序列a ...

  7. luogu P2344 奶牛抗议 DP 树状数组 离散化

    P2344 奶牛抗议 最新讨论 暂时没有讨论 题目背景 Generic Cow Protests, 2011 Feb 题目描述 约翰家的N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在 ...

  8. HDU - 5877 Weak Pair 2016 ACM/ICPC 大连网络赛 J题 dfs+树状数组+离散化

    题目链接 You are given a rootedrooted tree of NN nodes, labeled from 1 to NN. To the iith node a non-neg ...

  9. hdu_2227_Find the nondecreasing subsequences_树状数组,离散化

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2227 题意:给你一个集合,让你求递增子序列有多少个,和树状数组求逆序对差不多,不过数据比较大,要离散化 ...

最新文章

  1. oracle完全卸載,Oracle10g的完全卸載
  2. vue token 过期处理
  3. sqlserver 动态表名 动态字段名 执行 动态sql
  4. MVC学习之简单的CRUD
  5. 使用HTML5 FormData轻松完成Ajax表单提交
  6. 竟还有这样的代码注释我笑喷了
  7. 计算几何——poj1410,线段不规范交
  8. 数据库设计软件-powerdesign,导出表结构为Word文档
  9. WPS无法使用复制粘贴快捷键
  10. chrome刷新缓存
  11. 2020最新抖音上热门技巧你知道了几个?
  12. 编译liteos(ubuntu)
  13. 微信小程序 WXS(WeiXin Script)
  14. 虚拟机连接外网(桥接)
  15. 【学习笔记】汇编:关于CMP的使用实例
  16. 不是抽象类的基类不是好基类
  17. VS2015 打包应用程序“系统必备”
  18. 通过网页或者移动设备链接跳转qq(tim)添加好友(群)
  19. 解决 “已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭”
  20. 河北金融计算机网络基础在线6.1.3,2016秋大学计算机基础(河北金融学院)

热门文章

  1. 【大咖有约】MongoDB 大中华区首席技术顾问唐建法:如何在MongoDB中实现强事务...
  2. [从零学习汇编语言] -寄存器详解
  3. 量子计算与量子信息之Grover算法的量子电路实现
  4. 用css来实现上下左右箭头
  5. 数据仓库实验一分箱与数据平滑
  6. YOLO 9000论文翻译 | YOLO9000:Better, Faster, Stronger
  7. 华为的型号命名规则_海康网络网络摄像机命名规则,海康IPC型号含义解释说明...
  8. 关于IAP升级调试注意问题
  9. [MyBatis学习笔记] 二、Mybatis基本操作及相关标签介绍
  10. linux关于usb的使用,linux之常见的使用USB设备,linuxusb设备这些USB设备包括U