首先离散化,即相邻关键点之间的部分可以压成一段。

注意到区间互不包含,因此排序后每个位置的清理影响到的是一段连续区间的清理工的工作长度。

这显然可以用线段树维护,支持区间减去一个数,单点加上$inf$,以及查询全局最小值。

对于每次清理,暴力枚举区间内所有没清理过的段,在线段树中区间修改,用并查集进行路径压缩即可。

时间复杂度$O(n\log n)$。

#include<cstdio>
#include<algorithm>
using namespace std;
typedef pair<int,int>P;
const int N=300010,M=1050000,inf=1000000010;
int n,m,i,j,x,b[N<<1],f[N<<1],tag[M];P v[M];struct E{int l,r;}a[N];
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline void add(int x,int p){v[x].first+=p;tag[x]+=p;}
inline void pb(int x){if(tag[x])add(x<<1,tag[x]),add(x<<1|1,tag[x]),tag[x]=0;}
void build(int x,int a,int b){
if(a==b){v[x]=P(::a[a].r-::a[a].l,a);return;}
int mid=(a+b)>>1;
build(x<<1,a,mid),build(x<<1|1,mid+1,b);
v[x]=min(v[x<<1],v[x<<1|1]);
}
void del(int x,int a,int b,int c){
if(a==b){v[x].first+=inf;return;}
pb(x);
int mid=(a+b)>>1;
if(c<=mid)del(x<<1,a,mid,c);else del(x<<1|1,mid+1,b,c);
v[x]=min(v[x<<1],v[x<<1|1]);
}
void change(int x,int a,int b,int c,int d,int p){
if(c<=a&&b<=d){add(x,p);return;}
pb(x);
int mid=(a+b)>>1;
if(c<=mid)change(x<<1,a,mid,c,d,p);
if(d>mid)change(x<<1|1,mid+1,b,c,d,p);
v[x]=min(v[x<<1],v[x<<1|1]);
}
int F(int x){return f[x]==x?x:f[x]=F(f[x]);}
inline int lower(int x){
int l=1,r=m,mid,t;
while(l<=r)if(b[mid=(l+r)>>1]<=x)l=(t=mid)+1;else r=mid-1;
return t;
}
inline int getl(int c,int d){
int l=1,r=n,mid,t;
while(l<=r){
mid=(l+r)>>1;
if(a[mid].r<=c)l=mid+1;
else if(a[mid].l>=d)r=mid-1;
else r=(t=mid)-1;
}
return t;
}
inline int getr(int c,int d){
int l=1,r=n,mid,t;
while(l<=r){
mid=(l+r)>>1;
if(a[mid].r<=c)l=mid+1;
else if(a[mid].l>=d)r=mid-1;
else l=(t=mid)+1;
}
return t;
}
inline void clean(int l,int r){
int x=lower(l);
while(1){
x=F(x);
if(b[x]>=r)return;
f[x]++;
change(1,1,n,getl(b[x],b[x+1]),getr(b[x],b[x+1]),b[x]-b[x+1]);
}
}
int main(){
read(n);read(n);
for(i=1;i<=n;i++){
read(a[i].l),read(a[i].r);
b[++m]=a[i].l,b[++m]=a[i].r;
}
sort(b+1,b+m+1);
for(i=1;i<=m;i++)if(b[i]!=b[i-1])b[++j]=b[i];
m=j;
for(i=1;i<=m;i++)f[i]=i;
build(1,1,n);
for(i=1;i<=n;i++){
x=v[1].second;
printf("%d\n",x);
del(1,1,n,x);
clean(a[x].l,a[x].r);
}
return 0;
}

  

BZOJ4662 : Snow的更多相关文章

  1. POJ 3349 Snowflake Snow Snowflakes(简单哈希)

    Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 39324   Accep ...

  2. Snowflake Snow Snowflakes(哈希表的应用)

    Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 27312   Accep ...

  3. poj 3349:Snowflake Snow Snowflakes(哈希查找,求和取余法+拉链法)

    Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 30529   Accep ...

  4. POJ 3349 Snowflake Snow Snowflakes

    Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 27598 Accepted: ...

  5. POJ 3349:Snowflake Snow Snowflakes(数的Hash)

    http://poj.org/problem?id=3349 Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K T ...

  6. 哈希-Snowflake Snow Snowflakes 分类: POJ 哈希 2015-08-06 20:53 2人阅读 评论(0) 收藏

    Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 34762 Accepted: ...

  7. [poj3349]Snowflake Snow Snowflakes(hash)

    Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 37615 Accepted: ...

  8. Codeforces Round #339 Div.2 C - Peter and Snow Blower

    Peter got a new snow blower as a New Year present. Of course, Peter decided to try it immediately. A ...

  9. Codeforces Round #339 (Div. 1) A. Peter and Snow Blower 计算几何

    A. Peter and Snow Blower 题目连接: http://www.codeforces.com/contest/613/problem/A Description Peter got ...

随机推荐

  1. iOS 短信分享 邮件分享

    本地调用短信分享. #import "shareViewController.h" @interface shareViewController (){ UIAlertView * ...

  2. PullToRefreshScrollView嵌套SwipeMenuListView冲突问题解决

    参考: http://blog.csdn.net/u012255016/article/details/46048797 public class NoScrollSwipeMenuListView ...

  3. python中random模块使用

  4. Bootstrap – 1.认识

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  5. 以 MAMP 为 Mac OS X 安装并设置 PHP开发环境

    PHP 页需要通过 Web 服务器处理.因此,要在 Dreamweaver 中使用 PHP 进行开发,您需要访问支持 PHP 的 Web 服务器和 MySQL 数据库.phpMyAdmin 也很实用, ...

  6. Spring.Net学习之简单的知识点(一)

    1.Spring.Net是一个开源的应用程序框架,可以简化开发主要功能(1)实现控制反转(IOC/DI),也就是不要直接new,依赖于接口(2)面向切面编程(AOP),就是向程序中利用委托注册事件简单 ...

  7. ASP.NET Web API 配置返回的json字段的格式以及Action返回HttpResponseMessage类型和IHttpActionResult类型

    1. 对于返回的Json对象格式是以“帕斯卡”风格的(例如“FirstName”),然而我们的Api有很大的可能被带有Javascript的客户端消费,对于JS开发者来说可能更适合“驼峰”风格(例如” ...

  8. HDU5558 Alice's Classified Message(合肥区域赛 后缀数组)

    当初合肥区域赛的题(现场赛改了数据范围就暴力过了),可惜当初后缀数组算法的名字都没听过,现在重做下. i从1到n - 1,每次枚举rank[i]附近的排名,并记录当起点小于i时的LCP(rank[i] ...

  9. 关于socket——SO_SNDBUF and SO_RECVBUF

    转自:http://blog.csdn.net/wf1982/article/details/38871521 参见 http://stackoverflow.com/questions/425741 ...

  10. Linggle: 英语写作学习搜索引擎

    Linggle 搜索引擎是一个可用于英语写作的语法.句子工具,可帮助学习者分析更准确的英文写作建议,能够根据词性来推测短句和句子,可精准的分享出完整英文句子如何撰写. Linggle 是台湾学术团队研 ...