博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 817F - MEX Queries
阅读量:5948 次
发布时间:2019-06-19

本文共 2262 字,大约阅读时间需要 7 分钟。

思路:

离线+离散化+线段树

代码:

#include
using namespace std;#define LL long long #define pb push_back#define ls rt<<1,l,m#define rs rt<<1|1,m+1,rconst int N=1e5+5;int t[N],tree[N*16],lazy[N*16];LL l[N],r[N];vector
vc;void push_up(int rt){ tree[rt]=tree[rt<<1]+tree[rt<<1|1];}void push_down(int rt,int l,int r){ int m=(l+r)>>1; if(lazy[rt]==1){ lazy[rt<<1]=lazy[rt<<1|1]=1; tree[rt<<1]=m-l+1; tree[rt<<1|1]=r-m; } else if(lazy[rt]==2){ lazy[rt<<1]=lazy[rt<<1|1]=2; tree[rt<<1]=tree[rt<<1|1]=0; } else if(lazy[rt]==3){ lazy[rt<<1]=3-lazy[rt<<1]; lazy[rt<<1|1]=3-lazy[rt<<1|1]; tree[rt<<1]=m-l+1-tree[rt<<1]; tree[rt<<1|1]=r-m-tree[rt<<1|1]; } lazy[rt]=0;}void build(int rt,int l,int r){ if(l==r){ tree[rt]=0; lazy[rt]=0; return ; } int m=(l+r)>>1; build(ls); build(rs); push_up(rt);}void update(int t,int L,int R,int rt,int l,int r){ if(L<=l&&r<=R){ if(t==1){ tree[rt]=r-l+1; lazy[rt]=1; } else if(t==2){ tree[rt]=0; lazy[rt]=2; } else{ if(lazy[rt]&&l!=r)push_down(rt,l,r);//注意这里,在更新第3种操作时,把之前在这个节点的操作pushdown tree[rt]=r-l+1-tree[rt]; lazy[rt]=3; } return ; } if(lazy[rt])push_down(rt,l,r); int m=(l+r)>>1; if(L<=m)update(t,L,R,ls); if(R>m) update(t,L,R,rs); push_up(rt);}int query(int rt,int l,int r){ if(l==r){ return l; } if(lazy[rt])push_down(rt,l,r); int m=(l+r)>>1; if(tree[rt<<1]!=m-l+1)return query(ls); else return query(rs);}int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin>>n; vc.pb(1LL); for(int i=1;i<=n;i++)cin>>t[i]>>l[i]>>r[i],vc.pb(l[i]),vc.pb(r[i]),vc.pb(r[i]+1),vc.pb(l[i]+1); sort(vc.begin(),vc.end()); vc.erase(unique(vc.begin(),vc.end()),vc.end()); int m=vc.size(); build(1,1,m); for(int i=1;i<=n;i++){ int L=lower_bound(vc.begin(),vc.end(),l[i])-vc.begin()+1; int R=lower_bound(vc.begin(),vc.end(),r[i])-vc.begin()+1; update(t[i],L,R,1,1,m); cout<
<

 

转载于:https://www.cnblogs.com/widsom/p/8519724.html

你可能感兴趣的文章
Ubuntu14.04LTS更新源
查看>>
Ubuntu上hi3531交叉编译环境arm-hisiv100nptl-linux搭建过程
查看>>
oracle分区表、分区索引
查看>>
Tomcat+memcached+Nginx实现session共享
查看>>
Array operation
查看>>
Python基础学习三 文件操作(一)
查看>>
Raid小知识
查看>>
Linux报“Unknown HZ value! (288) Assume 100”错误
查看>>
mysql多实例实例化数据库
查看>>
Sql 字符串长度不足补0
查看>>
我的友情链接
查看>>
golang xml和json的解析与生成
查看>>
小弟的新书《Ext JS权威指南》终于出版了
查看>>
好吧好吧,就在这里消磨时间
查看>>
二层的,DTP+CAM/ARP
查看>>
2011工作总结
查看>>
Java学习笔记二:Java开发工具Eclipse的安装与使用
查看>>
3.4-ansible远程执行脚本
查看>>
常见邮件服务器(接收服务器和发送邮件服务器)地址
查看>>
系统监控Zabbix部署文档
查看>>