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

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

这显然可以用线段树维护,支持区间减去一个数,单点加上$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. 1.1 STL 概述

    综述   STL = Standard Template Library,标准模板库,惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R M ...

  2. 三、jQuery--jQuery插件--jQuery插件——Validation Plugin

    简介: 客户端验证:现代网站填写表单时,几乎一定会采用的方式. 优点:1.可以减少服务器压力 2.缩短用户等待时间和提升用户体验 jQuery有很多表单验证插件:https://plugins.jqu ...

  3. Oracle数据库锁表及解锁进程

    下午代码迁移,更新数据库记录时for update语句无法执行,数据库被锁,KILL掉几个进程搞定. Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实 ...

  4. win10总是自动重启的解决办法

    win10总是自动重启的解决办法_百度经验http://jingyan.baidu.com/article/7908e85c983523af481ad214.html

  5. Installing MySQL Server on CentOS

    MySQL is an open-source relational database. For those unfamiliar with these terms, a database is wh ...

  6. html5 离线存储 worker

    html5 离线存储 <!DOCTYPE html> <html manifest="cache.manifest"> <!--manifest存储- ...

  7. phpcms-v9系统搭建wap网站及单页面

    如需要绑定域名为wap.domain.com,作下如操作: 一.把wap.domain.com域名绑定到你的这个网站主机上. 二.在网站后台——模块——手机门户域名里面填写“http://wap.do ...

  8. Java Data Type

    官方文档:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 转载地址:http://blog.csdn.n ...

  9. 字幕文件 WebVTT 与 srt 之间的互相转化

    1. WebVTT 2 srt 1. 用记事本打开 .vtt 文件: 2. 在记事本中点击 编辑  -> 替换 -> 查找内容中输入".",替换为中输入",& ...

  10. HTTP访问的两种方式(HttpClient+HttpURLConnection)整合汇总对比(转)

    在Android上http 操作类有两种,分别是HttpClient和HttpURLConnection,其中两个类的详细介绍可以问度娘. HttpClient: HttpClient是Apache ...