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 ...
随机推荐
- Scala io操作
1. 读文件 scala特有的是scala.io.Source,例如: import scala.io._ Source.fromFile(“cn.scala”,”utf8”).mkString 逐行 ...
- virtualBox文件共享
具体过程,可以参考: http://jingyan.baidu.com/article/2fb0ba40541a5900f2ec5f07.html 共享命令:sudo mount -t vboxsf ...
- [非技术参考]C#基础:使用Thread创建线程(1)
Thread类可以创建和控制线程,Thread类的构造函数重载为接受ThreadStart和ParameterizedThreadStart类型的委托参数.下面我们用一个例子来解释怎样用Thread类 ...
- WSDL规则解释(转)
转自:http://www.blogjava.net/baoyaer/articles/116413.html WSDL文档可以分为两部分.顶部分由抽象定义组成,而底部分则由具体描述组成.抽象部分以独 ...
- python 学习之Windows 下的编码处理!
问题1: Non-ASCII character '\xe9' in file 问题原因:程序编码上出现问题 解决方法:在程序头部加上代码 #-*- coding: UTF-8 -*- 设置代码编码为 ...
- 解决:sudo: parse error in /etc/sudoers near line 24 ...报错
ubuntu系统下由于添加用户权限的时候直接用的vim对 /etc/sudoers 文件编辑,保存退出的时候,再使用sudo su 等等命令一直报错如下: sudo: parse error in / ...
- 利用 Android Studio 和 Gradle 打包多版本APK
在项目开发过程中,经常会有需要打包不同版本的 APK 的需求. 比如 debug版,release版,dev版等等. 有时候不同的版本中使用到的不同的服务端api域名也不相同. 比如 debug_ap ...
- 整数数组的定义,然后输入一个整数X,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j
//整数数组的定义,然后输入一个整数x,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j: //如果X在该阵列,返回位置的阵列中的数. 资源: #include<iostr ...
- 本地yum源安装GCC
Linux环境下yum源安装GCC 前提条件是有Linux环境的安装盘ISO文件 在Linux系统中创建两个目录,一个是用来存放ISO文件,一个是用来挂载该ISO文件,如下: $mkdir /root ...
- Linux下多线程查看工具(pstree、ps、pstack)
转自:http://blog.csdn.net/yfkiss/article/details/6729364 1. pstree pstree以树结构显示进程 $ pstree -p work | g ...