Color the ball(树状数组+线段树+二分)
Color the ball
Time Limit : 9000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 3 Accepted Submission(s) : 1
题解:线段树+树状数组,线段树用的很巧妙,少了lazy的麻烦;
树状数组代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=;
int tree[MAXN+];
int lowbit(int x){
return x&(-x);
}
void update(int x,int v){
while(x<=MAXN){
tree[x]+=v;
x+=lowbit(x);
}
}
int query(int x){
int temp=;
while(x>){
temp+=tree[x];
x-=lowbit(x);
}
return temp;
}
int main(){
int N,a,b;
while(~scanf("%d",&N),N){
memset(tree,,sizeof(tree));
for(int i=;i<N;i++){
scanf("%d%d",&a,&b);
update(a,);
update(b+,-);
}
for(int i=;i<=N;i++){
if(i-)printf(" ");
printf("%d",query(i));
}
puts("");
}
return ;
}
线段树:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#define L tree[root].l
#define R tree[root].r
#define S tree[root].sum
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=;
struct Node{
int l,r,sum;
};
Node tree[MAXN<<];
int ans[MAXN];
void build(int root,int l,int r){
L=l;R=r;S=;
if(l==r)return;
else{
int mid=(l+r)>>;
build(lson);
build(rson);
}
}
void update(int root,int l,int r){
if(L==l&&R==r)S++;
else{
int mid=(L+R)>>;
if(mid>=r)update(root<<,l,r);
else if(mid<l)update(root<<|,l,r);
else{
update(lson);
update(rson);
}
}
}
void query(int root){
if(S){
for(int i=L;i<=R;i++)
ans[i]+=S;
}
if(L==R)return;
query(root<<);query(root<<|);
}
int main(){
int N,a,b;
while(~scanf("%d",&N),N){
build(,,N);
memset(ans,,sizeof(ans));
for(int i=;i<N;i++){
scanf("%d%d",&a,&b);
update(,a,b);
}
query();
for(int i=;i<=N;i++){
if(i-)printf(" ");
printf("%d",ans[i]);
}puts("");
}
return ;
}
以前二分水过一次:贴下吧
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1);
#define mem(x,y) memset(x,y,sizeof(x))
const int MAXN=1e5+100;
int s[MAXN],e[MAXN];
int main(){
int N;
while(scanf("%d",&N),N){
for(int i=0;i<N;i++){
scanf("%d%d",&s[i],&e[i]);
}
sort(s,s+N);sort(e,e+N);
int q;
for(int i=1;i<=N;i++){
q=i;
int x=upper_bound(s,s+N,q)-s;
int y=lower_bound(e,e+N,q)-e;
if(i!=1)printf(" ");
printf("%d",x-y);
if(i==N)puts("");
}
}
return 0;
}
Color the ball(树状数组+线段树+二分)的更多相关文章
- 洛谷P2414 阿狸的打字机 [NOI2011] AC自动机+树状数组/线段树
正解:AC自动机+树状数组/线段树 解题报告: 传送门! 这道题,首先想到暴力思路还是不难的,首先看到y有那么多个,菜鸡如我还不怎么会可持久化之类的,那就直接排个序什么的然后按顺序做就好,这样听说有7 ...
- 树状数组 && 线段树应用 -- 求逆序数
参考:算法学习(二)——树状数组求逆序数 .线段树或树状数组求逆序数(附例题) 应用树状数组 || 线段树求逆序数是一种很巧妙的技巧,这个技巧的关键在于如何把原来单纯的求区间和操作转换为 求小于等于a ...
- hdu1394(枚举/树状数组/线段树单点更新&区间求和)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:给出一个循环数组,求其逆序对最少为多少: 思路:对于逆序对: 交换两个相邻数,逆序数 +1 ...
- hdu 1166:敌兵布阵(树状数组 / 线段树,入门练习题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 5147 Sequence II【树状数组/线段树】
Sequence IITime Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- 数据结构--树状数组&&线段树--基本操作
随笔目的:方便以后对树状数组(BIT)以及基本线段树的回顾 例题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 例题:hdu 1166 敌兵布阵 T ...
- BZOJ_1901_&_ZJU_2112_Dynamic_Rankings_(主席树+树状数组/线段树+(Treap/Splay))
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1901 给出一个长度为n的数列A,有m次询问,询问分两种:1.修改某一位置的值;2.求区间[l, ...
- BZOJ 3333 排队计划 树状数组+线段树
题目大意:给定一个序列.每次选择一个位置,把这个位置之后全部小于等于这个数的数抽出来,排序,再插回去,求每次操作后的逆序对数 首先我们每一次操作 对于这个位置前面的数 因为排序的数与前面的数位置关系不 ...
- 第十四个目标(dp + 树状数组 + 线段树)
Problem 2236 第十四个目标 Accept: 17 Submit: 35 Time Limit: 1000 mSec Memory Limit : 32768 KB Probl ...
随机推荐
- 理解ROS的节点(NODE)
经过前面的学习,我们已经知道了如何构建一个ROS的包,这篇博客将介绍ROS中的节点的概念. 在继续之前,请按ctrl+alt+t打开一个终端,在里面输入: sudo apt-get install r ...
- classpath的总结
转自:http://blog.csdn.net/javaloveiphone/article/details/51994268 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.src不是 ...
- javaTemplates-学习笔记一
第一步,下载Java运行环境-JDK JDK -'1.8.0_25'[附链接地址] 安装JDK配置环境 安装好jdk,然后配置环境变量.不同系统配置环境变量百度Google之,附上WIN8配置方法[J ...
- NAND FLASH特性说明
1.NAND FLASH 的特殊性. 1)存在坏块.由于NAND生产工艺的原因,出厂芯片中会随机出现坏块.坏块在出厂时已经被初始化,并在特殊区域中标记为不可用,在使用过程中如果出现坏块,也需要进行标记 ...
- Vim 实用技术,第 2 部分: 常用插件(转)
http://blog.jobbole.com/20619/ 2.1. gzip(压缩文件支持) 作者:Bram Moolenar 网站脚本编号:无(包含在 Vim 的标准发布之中) 安装说明:无 功 ...
- Wide character in print at hcp.pl line 21.
jrhmpt01:/root# cat -n hcp.pl 1 use LWP::UserAgent; 2 use Encode; 3 $ua = LWP::UserAgent->new; 4 ...
- cocos2dx mac环境搭建
1)下载cocos2dx 2.2.3并解压
- Windows Azure 现已完全受 Juju 支持
我们很高兴地宣布,Windows Azure 现已完全受 Juju 支持,这也是我们为实现开放性和互操作性而不断努力的结果.这意味着 Ubuntu 用户现在可以使用 Juju 及其直观的图形用户界面设 ...
- 关于MVC EntityType has no key defined的问题
关于MVC EntityType has no key defined的问题 在测试MVC时发现一个奇怪的问题,在Model中定义数据类时,如 public class UserInfo { publ ...
- ubuntu16.04安装kde桌面出错: /var/cache/apt/archives/kde-config-telepathy-accounts_4%3a15.12.3-0ubuntu1_amd64.deb
出错提示: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 kubuntu-desktop 已经是最新版 (1.338). 您可能需要运行“apt-get - ...