题目:

  有一个无限长的纸带··上面被划分为若干个格子··现在进行N次操作,第i次操作在L到R上擦出曾经写上的数字(如果有),并写上数字i,询问最终可以看到多少个数字

  N小于10^6

题解:

  首先毫无疑问离散化,但注意离散化时候如果相邻两个数的差大于1··需要在中间插入一个在两数之间的数···不然会错··

  然后正常的方法可以线段树来搞··然而可能被卡常··

  最快的方法同时也是最巧的方法:并查集,我们将询问倒着来··然后用并查集维护每次染色的最右端的位置,具体实现看代码,可以证明为O(n)的复杂度

代码:

  

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
inline int R(){
char c;int f=;
for(c=getchar();c<''||c>'';c=getchar());
for(;c<=''&&c>='';c=getchar()) f=(f<<)+(f<<)+c-'';
return f;
}
const int N=4e6+;
struct node{int l,r;}q[N];
bool visit[N];
int n,b[N*],cnt=,father[N*],ans;
inline int get(int a){
if(father[a]==a) return a;
else return father[a]=get(father[a]);
}
int main()
{
//freopen("a.in","r",stdin);
n=R();
for(int i=,x,y;i<=n;i++) x=R(),y=R(),q[i].l=x+,q[i].r=y,b[++cnt]=x+,b[++cnt]=y;
sort(b+,b+cnt+);cnt=unique(b+,b+cnt+)-b-;int temp=cnt;
for(int i=;i<=cnt;i++)
if(b[i-]+!=b[i]) b[++temp]=b[i-]+;
cnt=temp;sort(b+,b+cnt+);cnt=unique(b+,b+cnt+)-b-;
for(int i=;i<=cnt;i++) father[i]=i;
for(int i=;i<=n;i++) q[i].l=lower_bound(b+,b+cnt+,q[i].l)-b,q[i].r=lower_bound(b+,b+cnt+,q[i].r)-b;
for(int i=n;i>=;i--){
bool flag=false;
for(int pre=,pos=q[i].l;pos<=q[i].r;pos++){
if(pre) father[pre]=pos;
if(!visit[pos]) pre=pos,visit[pos]=true,flag=true;
else pre=pos,pos=get(pos);
}
if(flag) ans++;
}
cout<<ans<<endl;
return ;
}

刷题总结——纸带(NOIP赛前模拟)的更多相关文章

  1. NOIP 赛前模拟记录

    8.11 T1 给定一个序列M,求出能过构造出的序列使得(Si+Si+1)/2=Mi成立的序列个数.保证M,S递增. T2 平面点集中最大的四边形面积 T3 不太懂得一道国家队选拔的加强版. 90+2 ...

  2. NOIP赛前模拟20171027总结

    题目: 1.寿司 给定一个环形的RB串··要求经过两两互换后RB分别形成两段连续区域,求最少操作次数(算法时间O(n)) 2.金字塔 给定一个金字塔的侧面图有n层··已知每一层的宽度··高度均为1·· ...

  3. NOIP前的刷题记录

    因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数   组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...

  4. NOI Online 赛前刷题计划

    Day 1 模拟 链接:Day 1  模拟 题单:P1042 乒乓球  字符串 P1015 回文数  高精 + 进制 P1088 火星人  搜索 + 数论 P1604 B进制星球  高精 + 进制 D ...

  5. 【NOIP2015模拟11.4】JZOJ8月6日提高组T1 刷题计划

    [NOIP2015模拟11.4]JZOJ8月6日提高组T1 刷题计划 题目 题解 题意 有\(n\)道题,编号为1~\(n\) 给出\(m\)次操作 每次操作有3种类型 1 \(x\) 表示交了\(A ...

  6. NOIP&CSP PJ 难度刷题记录

    前言 本来不想写前言的(>人<:) 这只是 mjl 给我们布置的作业,并不是我自己在刷题! 不保证所有代码的正确性,它们仅仅是通过了所有数据点而已. 1.模拟板块 整体难度:红~黄(模拟不 ...

  7. 牛客网NOIP赛前集训营-提高组(第四场)B题 区间

    牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...

  8. NOIp2018停课刷题记录

    Preface 老叶说了高中停课但是初中不停的消息后我就为争取民主献出一份力量 其实就是和老师申请了下让我们HW的三个人听课结果真停了 那么还是珍惜这次机会好好提升下自己吧不然就\(AFO\)了 Li ...

  9. 洛谷 P1167 刷题

    洛谷 P1167 刷题 洛谷传送门 题目描述 noip临近了,小A却发现他已经不会写题了.好在现在离竞赛还有一段时间,小A决定从现在开始夜以继日地刷题.也就是说小A废寝忘食,一天二十四小时地刷题. 今 ...

随机推荐

  1. 项目:Vue+node+后台管理项目小结

    序:本文主要分两块说:项目机制,具体用到的知识块. 1. 项目机制 项目的原型以vue-cli为原型,进行项目的初步构建.项目以node.js服务和webpack打包机制为依托,将.vue文件打包为浏 ...

  2. PHP数据库扩展 - PDO操作

    PDO操作 PDO操作 描述:odp是php对数据库操作统一化的操作 语法:$pdo = new PDO("DB名:host=主机名;dbname=DB名","DB账号& ...

  3. Spring Cloud学习介绍

    最近在学spring cloud, 整理了下 简单知识要求: 1.要了解springboot 2.了解分布式架构 3.了解微服务 4.了解springcloud是做什么的 带着这些,初学者 就至少有个 ...

  4. session在C#一般处理程序的调用方式

    在C#中有一个一般处理程序,可以快速地进行一些逻辑运算等功能,但在这个页面上,不能直接选择使用session进行页面间的值的传递,如何使得页面可以使用session呢 在页面开头写上 using Sy ...

  5. 五、Linux 远程登录

    Linux 远程登录 Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器. 这时我们就需要远程登录到Linux服务器来管理维护系统. Linux系统中是通过ss ...

  6. PS1

    linux系统终端命令提示符设置(PS1)记录 - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/5985970.html PS(Prompt Sig ...

  7. mysql六:数据备份、pymysql模块

    一 IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 掌握: #1. 测试+链接数据库 #2. 新建库 #3. 新建表,新增字段+类型+约束 #4. 设计表 ...

  8. 常用模块之 os,json,shelve,xml模块

    os 即操作系统 在 os 中提供了很多关于文件,文件夹,路径处理的函数 这是我们学习的重点 os.path 是os模块下专门用于处理路径相关的 python是一门跨平台语言,由于每个平台路径规则不同 ...

  9. Python 格式化

    数字前面补0 字符型: print('23'.zfill(5)) 数字型: print('%011d' % 124) 日期与str互转: datetime 转 str str_date = datet ...

  10. Codeforces Round #464 (Div. 2) C. Convenient For Everybody

    C. Convenient For Everybody time limit per test2 seconds memory limit per test256 megabytes Problem ...