博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-1541 Stars 树状数组
阅读量:5872 次
发布时间:2019-06-19

本文共 1011 字,大约阅读时间需要 3 分钟。

题义为给定N个点按照先x轴,后y轴坐标排序,求某一点的左下角的星星数量,刚开始用二维的树状数组来做,结果肯定是内存不过用。

该题正解为在给定的坐标点的排序后,只对x轴坐标建立一个一维数组,对于当前状态按x轴将平面划分成M个区域,由于给定的点的y轴坐标一定是当前最高的,所以直接对横坐标前求和即可。

代码如下:

#include 
#include
#include
#include
#include
#define MAXN 32005 using namespace std; int N, res[MAXN+5], c[MAXN+5]; inline int lowbit(int x) {
return x & -x; } inline void modify(int pos, int val) {
for (int i = pos; i <= MAXN; i += lowbit(i)) c[i] += val; } inline int getsum(int pos) {
int s = 0; for (int i = pos; i > 0; i -= lowbit(i)) {
s += c[i]; } return s; } int main() { int x, y; while (scanf("%d", &N) == 1) {
memset(c, 0, sizeof (c)); memset(res, 0, sizeof (res)); for (int i = 0; i < N; ++i) {
scanf("%d %d", &x, &y); x++; res[getsum(x)]++; modify(x, 1); } for (int i = 0; i < N; ++i) printf("%d\n", res[i]); } return 0; }

转载地址:http://yuhnx.baihongyu.com/

你可能感兴趣的文章
就是一个表格
查看>>
找回使用Eclipse删除的文件
查看>>
移动开发Html 5前端性能优化指南
查看>>
《系统架构师》——操作系统和硬件基础
查看>>
如何看待一本图书
查看>>
Linux 中如何通过命令行访问 Dropbox
查看>>
开发进度——4
查看>>
JS里验证信息
查看>>
Akka actor tell, ask 函数的实现
查看>>
windows10 chrome 调试 ios safari 方法
查看>>
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
详解Microsoft.AspNetCore.CookiePolicy
查看>>
SCDPM2012 R2实战一:基于SQL 2008 R2集群的SCDPM2012 R2的安装
查看>>
SQL SERVER中字段类型与C#数据类型的对应关系
查看>>
Linux lsof命令详解
查看>>
SVG path
查看>>
js判断checkbox是否选中
查看>>
多系统盘挂载
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
MR1和MR2的工作原理
查看>>