poj_3067 树状数组
题目大意
左右两个竖排,左边竖排有N个点,从上到下依次标记为1,2,...N; 右边竖排有M个点,从上到下依次标记为1,2....M。现在从K条直线分别连接左边一个点和右边一个点,求这K条直线的交点个数(左右竖排上的点不算做交点)。
给出N,M,K,以及K条线的起点和终点。
题目分析
求两两交点的问题最好固定顺序,如i和i之前的交点,这样便于统计而不重复不遗漏。在将K条线按照左边点从小到大的顺序进行排序,左边点相同按照右边点从小到大排序之后,按照顺序分析当前线和它之前的线的交点个数:
当前线k的左边点序号为 xa, 右边点序号为 ya, 则对于当前线k之前的那些线1--k-1,他们左边点的序号肯定小于等于xa, 这些线(1--k-1)中右边点序号大于 ya的那些线会和当前线k有一个交点。因此对于当前线k,统计之前1---k-1线的右边点在 [ya + 1--M]中的个数,形成了一个区间统计问题。
考虑右边点1,2....M 各对应一个统计变量 count[i], 每次分析线k,都将线k的右边点ya 对应的count[ya] ++。 这样,每次都统计 [t, M]区间内 count[i]的和。 使用树状数组来实现。
实现(c++)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<string.h>
using namespace std;
#define MAX_CITY_NUM 1002struct Highway{int east_city;int west_city;Highway(int e, int w):east_city(e), west_city(w){}
};
vector<Highway> gHws;
int gC[MAX_CITY_NUM];
int gLowbit[MAX_CITY_NUM];bool Cmp(const Highway& h1, const Highway& h2){if (h1.east_city == h2.east_city)return h1.west_city < h2.west_city;return h1.east_city < h2.east_city;
}void InitLowbit(int n){for (int i = 1; i <= n; i++){gLowbit[i] = i&(-i);}
}
void InitSequence(int n){memset(gC, 0, sizeof(gC));
}void Update(int k, int n, int add){while (k <= n){gC[k] += add;k += gLowbit[k];}
}int Query(int k){int result = 0;while (k > 0){result += gC[k];k -= gLowbit[k];}return result;
}int main(){int cas, N, M, K, e_city, w_city;scanf("%d", &cas);InitLowbit(1001);for (int c = 1; c <= cas; c++){scanf("%d %d %d", &N, &M, &K);gHws.clear();InitSequence(M);for (int i = 1; i <= K; i++){scanf("%d %d", &e_city, &w_city);gHws.push_back(Highway(e_city, w_city));}sort(gHws.begin(), gHws.end(), Cmp);long long int crossing = 0;for (int i = 0; i < K; i++){crossing += (Query(M) - Query(gHws[i].west_city));Update(gHws[i].west_city, M, 1);}printf("Test case %d: %lld\n", c, crossing);}return 0;
}
转载于:https://www.cnblogs.com/gtarcoder/p/4794694.html
poj_3067 树状数组相关推荐
- 洛谷 P5057 [CQOI2006]简单题(树状数组)
嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...
- Color the ball(HDU1556)树状数组
每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...
- 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组
[BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...
- Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...
- hdu 1166 敌兵布阵(树状数组)
题意:区间和 思路:树状数组 #include<iostream> #include<stdio.h> #include<string.h> using names ...
- Equalizing Two Strings 冒泡排序or树状数组
首先考虑排序后相等 如果排序后相等的话就只考虑reverse长度为2的,所以a或者b排序后存在相邻两个字母相等的话就puts YES,n>26也直接puts YES 不然的话就假设c为a,b排完 ...
- Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组
题目链接 题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k. 首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t ...
- 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 ...
- 【模板】树状数组 2
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
最新文章
- ffmpeg frei0r filter 参数及效果
- netstat 命令state值
- java做服务器端给客户端传数据包_java 服务器怎样给客户端传输数据
- 原创|面试官:线上服务器CPU占用率高如何排查定位问题?
- Excel 批量处理行高(图文教程) - Excel篇
- [每日一题] 11gOCP 1z0-052 :2013-09-24 temporary tables.........................................C11...
- 文件摆渡是什么意思_数据摆渡是什么意思?如何确保安全性?
- 9.2. FreeSWITCH
- Pylot——跨平台的网站压力测试工具
- 迎接蜕变,期待 Internet Exploer 9
- 一加会不会适配鸿蒙系统,或将适配高通平台 传闻一些手机厂商正接触华为鸿蒙OS计划适配...
- Python爬取中国天气网天气数据
- java记事本的代码_Java基础——第一个记事本代码与Java注释
- verilog 语法笔记
- iOS之UITableView的使用——多分区表格以及分区索引
- 神山的方向至诚地祈祷、朝拜
- ZOJ - 3939
- 计算机网络—URL到显示的过程、Http、Https、长连接短连接
- 一款功能强大的开源excel在线表格
- 计算机三级信息安全知识点
热门文章
- mongo报错:not authorized on bb to execute command { create: \“xxx\“...}
- linux启动,重启,停止 jar,.sh脚本
- pytorch 与 numpy 的数组广播机制
- ImportError: No module named tensorflow.compat.v1 忽略已经安装的某个包版本 忽略已安装版本...
- ImportError: DLL load failed: 找不到指定的模块。 TensorFlow 1.13
- Python机器学习——DBSCAN聚类
- LeetCode简单题之Excel 表中某个范围内的单元格
- LeetCode简单题之复写零
- OpenCL™(开放计算语言)概述
- TensorFlow分布式(多GPU和多服务器)详解