POJ2528 线段树的区间操作
首先应该对该【0,10000000】进行离散化
即先将点集进行排序,然后从小到大缩小其中的间距,使得最后点数不会超过2*n
然后就是线段树操作
只需进行染色,然后最后用nlgn进行一个个查询颜色记录即可
#include<cstdio>
#include<cstring>
int color[20005*4],a[20005],p[20005],l[10005],r[10005],pd[10005],i,j,k,n,t,length;
void qs(int x,int y){
int i=x,j=y,k=a[(x+y)/2],t;
do{
while(a[i]<k) i++;
while(a[j]>k) j--;
if(i<=j){
t=a[i];a[i]=a[j];a[j]=t;
t=p[i];p[i]=p[j];p[j]=t;
i++;j--;
}
}while(i<j);
if(i<y) qs(i,y);
if(x<j) qs(x,j);
}
void build(int x,int y,int rt){
color[rt]=0;
if(x>=y) return;
int m=(x+y)/2;
build(x,m,2*rt);
build(m+1,y,2*rt+1);
}
void PushDown(int rt){
if(color[rt]!=0){
color[rt*2]=color[rt*2+1]=color[rt];
color[rt]=0;
}
}
void update(int x,int y,int rt){
if(l[k]<=x&&r[k]>=y){
color[rt]=k;
return;
}
PushDown(rt);
int m=(x+y)/2;
if(l[k]<=m) update(x,m,rt*2);
if(r[k]>m) update(m+1,y,rt*2+1);
}
int query(int x,int y,int rt){
if(color[rt]!=0){
if(!pd[color[rt]]) {
pd[color[rt]]=1;
return 1;
}
else return 0;
}
if(x==y) return 0;
int m=(x+y)/2;
return(query(x,m,rt*2)+query(m+1,y,rt*2+1));
}
int main()
{
scanf("%d",&t);
while(t--){
memset(pd,0,sizeof(pd));
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d%d",&a[2*i-1],&a[2*i]);
p[2*i-1]=2*i-1;
p[2*i]=2*i;
}
qs(1,2*n);
length=1;
for(i=1;i<=2*n;i++){
if(p[i]%2==0)
r[p[i]/2]=length;
else
l[(p[i]+1)/2]=length;
if(a[i]!=a[i+1]) length++;
}
build(1,length,1);
for(k=1;k<=n;k++)
update(1,length,1);
printf("%d\n",query(1,length,1));
}
return 0;
}
POJ2528 线段树的区间操作的更多相关文章
- poj-2528线段树练习
title: poj-2528线段树练习 date: 2018-10-13 13:45:09 tags: acm 刷题 categories: ACM-线段树 概述 这道题坑了我好久啊啊啊啊,,,, ...
- Codeforces Round #222 (Div. 1) D. Developing Game 线段树有效区间合并
D. Developing Game Pavel is going to make a game of his dream. However, he knows that he can't mak ...
- hiho一下20周 线段树的区间修改
线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题改了改,又出给了 ...
- hihoCode 1078 : 线段树的区间修改
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- UVA 12436-Rip Van Winkle's Code(线段树的区间更新)
题意: long long data[250001]; void A( int st, int nd ) { for( int i = st; i \le nd; i++ ) data[i] = da ...
- BZOJ 3110 ZJOI 2013 K大数查询 树套树(权值线段树套区间线段树)
题目大意:有一些位置.这些位置上能够放若干个数字. 如今有两种操作. 1.在区间l到r上加入一个数字x 2.求出l到r上的第k大的数字是什么 思路:这样的题一看就是树套树,关键是怎么套,怎么写.(话说 ...
- hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- 线段树(区间树)之区间染色和4n推导过程
前言 线段树(区间树)是什么呢?有了二叉树.二分搜索树,线段树又是干什么的呢?最经典的线段树问题:区间染色:正如它的名字而言,主要解决区间的问题 一.线段树说明 1.什么是线段树? 线段树首先是二叉树 ...
- HDU 1698 just a hook 线段树,区间定值,求和
Just a Hook Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1 ...
随机推荐
- 打破常规——大胆尝试在路由器上搭建SVN服务器
注册博客园挺久了,一直比较懒,虽然有几次想写点文章,但是一直没有行动,今天给大家带来一篇比较有意思的文章,不涉及技术上的,希望大家轻拍.本文的文字和图片全部为原创,尊重作者转载请注明出处! 说起路由器 ...
- Python字符串内建处理函数
#coding=utf-8 __author__ = 'Administrator' # 字符串处理函数 s1 = "study python string function , I lov ...
- 【Python笔记】异常处理
1 什么是异常 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误. 当Pytho ...
- [Python 标准库]第一章 文本
Chapter01 文本 1.1 string - 文本常量和模板 作用:包含处理文本的常量和类. 1.1.1 函数 capwords(s):字符串中所有单词首字母大写 maketrans():创建转 ...
- WPF-实现Windows 7 样式 Aero TreeView 控件
关于实现Windows 7 样式 Aero TreeView 控件的具体过程可以参考如下文章 http://www.cnblogs.com/o2ds/archive/2010/06/22/176302 ...
- 记录类型中String的释放
String能自动释放,在进行内存拷贝时需要进行手动释放.可以直接调用Finalize手工释放 如:TGraphicHideTab 记录中声明的Caption:string TGraphicHideT ...
- [Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程
[Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程 本章包含如何在 Android Studio 中书写或生成代码. Android Studio ...
- sybase convert 函数
1.从string到int的转换 convert(int,@string) select convert( int , '15') 2. 从int 到 decimal 的转换 convert(deci ...
- ASP.NET MVC 简易在线书店
写这篇博客的目的是为了记录自己的思想,有时候做项目做着做着就不知道下面该做什么了,把项目的具体流程记录下来,培养好习惯. 创建MVC项目 创建控制器StoreController public cla ...
- Nhibernate 多对多级联删除
在网上找到的方法:查看这里 //-------------------------------------Article.hbm.xml-------------------------------- ...