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 ...
随机推荐
- socket中的option
/// Set an option on the socket. /** * This function is used to set an option on the socket. * * @pa ...
- nginx args
$args $content_length $content_type $document_root $document_uri $host $http_user_agent $http_cookie ...
- Linux学习之Makefile文件的编写
转自:http://goodcandle.cnblogs.com/archive/2006/03/30/278702.html 目的: 基本掌握了 make 的用法,能在Linux系统上编 ...
- hdu 4455 Substrings(找规律&DP)
Substrings Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- Android ActionBar详解(一)--->显示和隐藏ActionBar
MainActivity如下: package cc.testsimpleactionbar0; import android.os.Bundle; import android.view.View; ...
- 批量修改文件名java
package test0715; import java.io.File; public class FileRename {public static void main(String[] arg ...
- css多行文本垂直居中问题研究
css多行文本垂直居中问题研究 <body> <h2>垂直居中对齐</h2> <style> *{margin:0; padding:0;} div { ...
- 如何取消一个本地svn目录与svn的联系(即恢复原有图标等)
在使用svn 的时候容易手抖错选update地址,使其目录所有同级文件夹上出现蓝色“?”图样,非常烦人,下面记录一下解决方案. 首先在该目录下打开同级文件件,工具→文件夹选项→查看→隐藏文件和文件夹→ ...
- delete了,析构函数却没有调用
析构函数在对象的生命结束时,会自动调用,大家所熟知的智能指针就是根据析构函数的这种特性而实现的,包括Qt的内存管理机制,也都是利用了析构函数的这一机制来实现的.c++创始人Bjarne Stroust ...
- 让.net程序自动运行在管理员权限下
原文:让.net程序自动运行在管理员权限下 如何让.net程序自动运行在管理员权限下 VS2010 c# 编译的WINFORM程序 在Win7 以管理员身份运行 windows 7和vista提高的系 ...