Educational Codeforces Round 23 F. MEX Queries 离散化+线段树
2 seconds
256 megabytes
standard input
standard output
You are given a set of integer numbers, initially it is empty. You should perform n queries.
There are three different types of queries:
- 1 l r — Add all missing numbers from the interval [l, r]
- 2 l r — Remove all present numbers from the interval [l, r]
- 3 l r — Invert the interval [l, r] — add all missing and remove all present numbers from the interval [l, r]
After each query you should output MEX of the set — the smallest positive (MEX ≥ 1) integer number which is not presented in the set.
The first line contains one integer number n (1 ≤ n ≤ 105).
Next n lines contain three integer numbers t, l, r (1 ≤ t ≤ 3, 1 ≤ l ≤ r ≤ 1018) — type of the query, left and right bounds.
Print MEX of the set after each query.
3
1 3 4
3 1 6
2 1 3
1
3
1
4
1 1 3
3 5 6
2 4 4
3 1 6
4
4
4
1
Here are contents of the set after each query in the first example:
- {3, 4} — the interval [3, 4] is added
- {1, 2, 5, 6} — numbers {3, 4} from the interval [1, 6] got deleted and all the others are added
- {5, 6} — numbers {1, 2} got deleted
题意:给你n个区间,1操作表示把[l,r]赋值为1,2操作表示把[l,r]赋值为0,3操作表示把[l,r]异或1;
求第一个不为0的正整数。
思路:对于所有区间[l,r]取出l,r,r+1三个点;
离散化放入线段树中去
现在需要区间修改,区间异或,查询
需要两个lazy标记,一个存修改的值,一个存是否异或1.
区间查询log查找即可,详见代码。
小trick:需要加入最小值,即是1的情况;
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstring>
#include<vector>
#include<list>
#include<set>
#include<map>
#include<bitset>
#include<time.h>
using namespace std;
#define LL long long
#define pi (4*atan(1.0))
#define eps 1e-4
#define bug(x) cout<<"bug"<<x<<endl;
const int N=3e5+,M=4e6+,inf=,mod=1e9+;
const LL INF=1e18+,MOD=1e9+; int L=3e5+;
struct LT
{
int sum[N<<],to[N<<],sw[N<<];
void pushdown(int pos,int l,int r)
{
int mid=(l+r)>>;
if(to[pos]!=-)
{
to[pos<<]=to[pos];
to[pos<<|]=to[pos];
sum[pos<<]=to[pos]*(mid-l+);
sum[pos<<|]=to[pos]*(r-mid);
to[pos]=-;
sw[pos]=;
}
if(sw[pos])
{
if(to[pos<<]!=-)to[pos<<]=!to[pos<<];
else sw[pos<<]=!sw[pos<<];
if(to[pos<<|]!=-)to[pos<<|]=!to[pos<<|];
else sw[pos<<|]=!sw[pos<<|];
sum[pos<<]=(mid-l+)-sum[pos<<];
sum[pos<<|]=(r-mid)-sum[pos<<|];
sw[pos]=;
}
}
void build(int l,int r,int pos)
{
to[pos]=-;
sw[pos]=;
sum[pos]=;
if(l==r)return;
int mid=(l+r)>>;
build(l,mid,pos<<);
build(mid+,r,pos<<|);
}
void update(int L,int R,int c,int l,int r,int pos)
{
if(L<=l&&r<=R)
{
if(c==)
{
if(to[pos]!=-)to[pos]=!to[pos];
else sw[pos]=!sw[pos];
}
else
{
to[pos]=c;
sw[pos]=;
}
if(c==)sum[pos]=r-l+-sum[pos];
else sum[pos]=(r-l+)*c;
return;
}
pushdown(pos,l,r);
int mid=(l+r)>>;
if(L<=mid)update(L,R,c,l,mid,pos<<);
if(R>mid) update(L,R,c,mid+,r,pos<<|);
sum[pos]=sum[pos<<|]+sum[pos<<];
}
int query(int l,int r,int pos)
{
//cout<<l<<" "<<r<<" "<<sum[pos]<<" "<<to[pos]<<endl;
if(l==r)return l;
pushdown(pos,l,r);
//cout<<sum[pos<<1]<<" "<<sum[pos<<1|1]<<endl;
int mid=(l+r)>>;
if(sum[pos<<]==mid-l+)return query(mid+,r,pos<<|);
else return query(l,mid,pos<<);
}
}tree; int t[N],len;
LL l[N],r[N],s[N];
int getpos(LL x)
{
int pos=lower_bound(s+,s+len,x)-s;
return pos;
}
int main()
{
int n,k=;
scanf("%d",&n);
s[++k]=;
for(int i=;i<=n;i++)
scanf("%d%lld%lld",&t[i],&l[i],&r[i]),s[++k]=l[i],s[++k]=r[i],s[++k]=r[i]+;
sort(s+,s++k);
len=unique(s+,s++k)-s;
tree.build(,L,);
for(int i=;i<=n;i++)
{
int z=getpos(l[i]),y=getpos(r[i]);
if(t[i]==)tree.update(z,y,,,L,);
else if(t[i]==)tree.update(z,y,,,L,);
else if(t[i]==)tree.update(z,y,,,L,);
int x=tree.query(,L,);
//cout<<"xxx "<<x<<" "<<tree.sum[1]<<endl;
printf("%lld\n",s[x]);
}
return ;
}
Educational Codeforces Round 23 F. MEX Queries 离散化+线段树的更多相关文章
- [Codeforces]817F. MEX Queries 离散化+线段树维护
[Codeforces]817F. MEX Queries You are given a set of integer numbers, initially it is empty. You sho ...
- Educational Codeforces Round 37-F.SUM and REPLACE (线段树,线性筛,收敛函数)
F. SUM and REPLACE time limit per test2 seconds memory limit per test256 megabytes inputstandard inp ...
- Educational Codeforces Round 64 (Rated for Div. 2) (线段树二分)
题目:http://codeforces.com/contest/1156/problem/E 题意:给你1-n n个数,然后求有多少个区间[l,r] 满足 a[l]+a[r]=max([l, ...
- CF Educational Round 23 F.MEX Queries
写了3小时 = =.这两天堕落了,昨天也刷了一晚上hihocoder比赛,还爆了零.之后得节制点了,好好准备考研.. 首先很容易想到 压缩数据 + 线段树 然后对于Pushdown真很难写..需要牵涉 ...
- Educational Codeforces Round 40 F. Runner's Problem
Educational Codeforces Round 40 F. Runner's Problem 题意: 给一个$ 3 * m \(的矩阵,问从\)(2,1)$ 出发 走到 \((2,m)\) ...
- Educational Codeforces Round 23 A-F 补题
A Treasure Hunt 注意负数和0的特殊处理.. 水题.. 然而又被Hack了 吗的智障 #include<bits/stdc++.h> using namespace std; ...
- Educational Codeforces Round 23 补题小结
昨晚听说有教做人场,去补了下玩. 大概我的水平能做个5/6的样子? (不会二进制Trie啊,我真菜) A. 傻逼题.大概可以看成向量加法,判断下就好了. #include<iostream> ...
- 【Educational Codeforces Round 37 F】SUM and REPLACE
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 那个D函数它的下降速度是很快的. 也就是说到最后他会很快的变成2或者1 而D(2)==2,D(1)=1 也就是说,几次操作过后很多数 ...
- Codeforces Codeforces Round #316 (Div. 2) C. Replacement 线段树
C. ReplacementTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/570/problem ...
随机推荐
- UVA 11100 The Trip, 2007 (贪心)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- [转载]Oracle修改用户表所属表空间的步骤
1 .修改表的空间alter table TABLE_NAME move tablespace TABLESPACENAME 查询当前用户下的所有表选择'alter table'|| table_na ...
- [转载]对称加密DES和TripleDES
一. 对称加密 对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码).因此,通信双方都必须 ...
- maven 项目 查询部分关心的字段
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...
- OLED屏幕那些次像素有趣的排列方式
http://www.dzsc.com/data/2016-6-2/109856.html 我们今天的重点内容为倒数第二列内容的上半部分,也就是RGB排列和Pentile排列.在介绍OLED屏幕时候我 ...
- Spring Maven 包的依赖
<properties> <spring.version>4.3.11.RELEASE</spring.version> </properties> & ...
- roon
http://www.sthifi.com/Article/ViewArticle.asp?id=10895 http://kb.roonlabs.com/LinuxInstall https://c ...
- entry points
https://amir.rachum.com/blog/2017/07/28/python-entry-points/
- day5-json和pickle序列化
一.json模块 序列化:把一个对象的形态改变一下,使他能够存放在文件中,或者在网络上传输,序列化也叫持久化,是把对象存储到永久介质中,这样就不会因为掉电而丢失. JSON (JavaScript O ...
- UVa Live 4670 Dominating Patterns - Aho-Corasick自动机
题目传送门 快速的通道I 快速的通道II 题目大意 给定一堆短串,和一个文本串,问哪些短串在文本串中出现的次数最多. 我觉得刘汝佳的做法,时间复杂度有问题.只是似乎这道题短串串长太短不好卡.比如给出的 ...