F. MEX Queries
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

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:

  • l r — Add all missing numbers from the interval [l, r]
  • l r — Remove all present numbers from the interval [l, r]
  • 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.

Input

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.

Output

Print MEX of the set after each query.

Examples
input
3
1 3 4
3 1 6
2 1 3
output
1
3
1
input
4
1 1 3
3 5 6
2 4 4
3 1 6
output
4
4
4
1
Note

Here are contents of the set after each query in the first example:

  1. {3, 4} — the interval [3, 4] is added
  2. {1, 2, 5, 6} — numbers {3, 4} from the interval [1, 6] got deleted and all the others are added
  3. {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 离散化+线段树的更多相关文章

  1. [Codeforces]817F. MEX Queries 离散化+线段树维护

    [Codeforces]817F. MEX Queries You are given a set of integer numbers, initially it is empty. You sho ...

  2. Educational Codeforces Round 37-F.SUM and REPLACE (线段树,线性筛,收敛函数)

    F. SUM and REPLACE time limit per test2 seconds memory limit per test256 megabytes inputstandard inp ...

  3. 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, ...

  4. CF Educational Round 23 F.MEX Queries

    写了3小时 = =.这两天堕落了,昨天也刷了一晚上hihocoder比赛,还爆了零.之后得节制点了,好好准备考研.. 首先很容易想到 压缩数据 + 线段树 然后对于Pushdown真很难写..需要牵涉 ...

  5. Educational Codeforces Round 40 F. Runner's Problem

    Educational Codeforces Round 40 F. Runner's Problem 题意: 给一个$ 3 * m \(的矩阵,问从\)(2,1)$ 出发 走到 \((2,m)\) ...

  6. Educational Codeforces Round 23 A-F 补题

    A Treasure Hunt 注意负数和0的特殊处理.. 水题.. 然而又被Hack了 吗的智障 #include<bits/stdc++.h> using namespace std; ...

  7. Educational Codeforces Round 23 补题小结

    昨晚听说有教做人场,去补了下玩. 大概我的水平能做个5/6的样子? (不会二进制Trie啊,我真菜) A. 傻逼题.大概可以看成向量加法,判断下就好了. #include<iostream> ...

  8. 【Educational Codeforces Round 37 F】SUM and REPLACE

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 那个D函数它的下降速度是很快的. 也就是说到最后他会很快的变成2或者1 而D(2)==2,D(1)=1 也就是说,几次操作过后很多数 ...

  9. Codeforces Codeforces Round #316 (Div. 2) C. Replacement 线段树

    C. ReplacementTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/570/problem ...

随机推荐

  1. 3D模型文字动画

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

  2. The Little Prince-12/05

    The Little Prince-12/05 "When a mystery is too overpowering, one dare not disobey. Absurd as it ...

  3. HFA and outhandler differentiate or not

    better trouble shooting auto-open accidently? HFA not stable? check code modification ASAP!!!

  4. mysql 通过查看mysql 配置参数、状态来优化你的mysql

    我把MYISAM改成了INNODB,数据库对CPU方面的占用变小很多' mysql的监控方法大致分为两类: 1.连接到mysql数据库内部,使用show status,show variables,f ...

  5. Nginx和PHP上传文件大小的限制

    Nginx client_max_body_size 80m; PHP php.ini file_uploads = on ; 是否允许通过HTTP上传文件的开关.默认为ON即是开 upload_tm ...

  6. Python2的一些问题及解决办法

    1. 无法注释中文的解决办法 # -*- coding:utf8 -*- # 添加这一行就行了 from django.contrib import admin from myapp.models i ...

  7. SaaS的中年危机(转)

    如果说SaaS软件和人有什么地方很像的话,中年危机一定是其中一个.另一个是交税. 经常有人问我,春阳,你觉得xx SaaS公司怎么样? 如果这是一家成立2年以上的公司,我的回答多半是“活的不是那么滋润 ...

  8. Latex 公式积累

    NLP 语言模型 最大似然估计 \(p(w_{i} | w_{i-1}) = \frac{c(w_{i-1}w_{i})}{\sum \limits_{w_{i}} c(w_{i-1}w_{i})}\ ...

  9. 查看Linux服务器是否是虚拟机

    dmidecode -s system-product-name 物理机: [root@swnode1]# dmidecode -s system-product-name I840-GS 虚拟机: ...

  10. 20145221高其_Web安全基础实践

    20145221高其_Web安全基础实践 目录 实践目标 WebGoat BurpSuite Injection Flaws Cross-Site Scripting (XSS) 总结 实践目标 (1 ...