Division and Union CodeForces - 1101C (排序后处理)
There are nn segments [li,ri][li,ri] for 1≤i≤n1≤i≤n. You should divide all segments into two non-empty groups in such way that there is no pair of segments from different groups which have at least one common point, or say that it's impossible to do it. Each segment should belong to exactly one group.
To optimize testing process you will be given multitest.
Input
The first line contains one integer TT (1≤T≤500001≤T≤50000) — the number of queries. Each query contains description of the set of segments. Queries are independent.
First line of each query contains single integer nn (2≤n≤1052≤n≤105) — number of segments. It is guaranteed that ∑n∑n over all queries does not exceed 105105.
The next nn lines contains two integers lili, riri per line (1≤li≤ri≤2⋅1051≤li≤ri≤2⋅105) — the ii-th segment.
Output
For each query print nn integers t1,t2,…,tnt1,t2,…,tn (ti∈{1,2}ti∈{1,2}) — for each segment (in the same order as in the input) titi equals 11 if the ii-th segment will belongs to the first group and 22 otherwise.
If there are multiple answers, you can print any of them. If there is no answer, print −1−1.
Example
3
2
5 5
2 3
3
3 5
2 3
2 3
3
3 3
4 4
5 5
2 1
-1
1 1 2
Note
In the first query the first and the second segments should be in different groups, but exact numbers don't matter.
In the second query the third segment intersects with the first and the second segments, so they should be in the same group, but then the other group becomes empty, so answer is −1−1.
In the third query we can distribute segments in any way that makes groups non-empty, so any answer of 66 possible is correct.
题意:给你N个区间,让你把这N个区间分成2个非空的集合,使不存在任意一个元素x,它即被第一个集合的某一个区间包含即L<=x<=R,也被第二个集合的某些区间包含。
如果不可以分,输出-1,如果可以,输出1~n个数,代表第i的区间放在第d个集合,d为1或2.
思路,根据L和R把区间排序后,先把排序后的第一个区间的L和R作为第一个集合的总L和R,那么我们来维护这个L和R,使第一个集合的L~R是一个连续的区间。(L~R每一个元素都可以在第一个集合中找到区间包含)
接下来从2~n遍历区间
如果下一个区间和L~R有交集,那么加入到第一个集合,更新L和R,
否则加入到第二个集合之中。
细节见代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define gg(x) getInt(&x)
using namespace std;
typedef long long ll;
inline void getInt(int* p);
const int maxn=;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
int t;
struct node
{
int l;
int r;
int id;
};
typedef struct node node;
std::vector<node> v;
int n;
bool cmp(node a,node b)
{
if(a.l!=b.l)
{
return a.l<b.l;
}else
{
return a.r<b.r;
}
}
int ans[maxn];
int main()
{
scanf("%d",&t);
while(t--)
{
v.clear();
scanf("%d",&n);
node temp;
repd(i,,n)
{
scanf("%d %d",&temp.l,&temp.r);
temp.id=i;
v.push_back(temp);
}
sort(v.begin(), v.end(),cmp);
int le,ri;
le=v[].l;
ri=v[].r;
int is2=;
ans[v[].id]=;
for(int i=;i<=n-;i++)
{
temp=v[i];
if(temp.l<=le&&temp.r>=ri)
{
le=temp.l;
ri=temp.r;
ans[v[i].id]=;
}else if(temp.l<=ri&&temp.r<=ri)
{
// ri=temp.r;
ans[v[i].id]=;
}else if(temp.l<=ri&&temp.r>ri)
{
ri=temp.r;
ans[v[i].id]=;
}
else if(temp.l>ri)
{
is2=;
ans[v[i].id]=;
} }
if(is2)
{
repd(i,,n)
{
printf("%d ",ans[i]);
}
printf("\n");
}else
{
printf("-1\n");
}
}
return ;
} inline void getInt(int* p) {
char ch;
do {
ch = getchar();
} while (ch == ' ' || ch == '\n');
if (ch == '-') {
*p = -(getchar() - '');
while ((ch = getchar()) >= '' && ch <= '') {
*p = *p * - ch + '';
}
}
else {
*p = ch - '';
while ((ch = getchar()) >= '' && ch <= '') {
*p = *p * + ch - '';
}
}
}
Division and Union CodeForces - 1101C (排序后处理)的更多相关文章
- Educational Codeforces Round 4 D. The Union of k-Segments 排序
D. The Union of k-Segments You re given n segments on the coordinate axis Ox and the number k. The ...
- CodeForces - 426A(排序)
Sereja and Mugs Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Sub ...
- CF1101C Division and Union 线段相交问题
#include<iostream> #include<cstdio> #include<algorithm> #include<cstdlib> #i ...
- mysql union (all) 后order by的排序失效问题解决
上sql select * FROM ( SELECT SUM(c.overtime_num) AS delay_num, ) rate , '全网' as reaCodeFROM calc_vmap ...
- Educational Codeforces Round 58 (Rated for Div. 2) 题解
Educational Codeforces Round 58 (Rated for Div. 2) 题目总链接:https://codeforces.com/contest/1101 A. Min ...
- Educational Codeforces Round 58 A,B,C,D,E,G
A. Minimum Integer 链接:http://codeforces.com/contest/1101/problem/A 代码: #include<bits/stdc++.h> ...
- Educational Codeforces Round 58 Solution
A. Minimum Integer 签到. #include <bits/stdc++.h> using namespace std; #define ll long long ll l ...
- Educational Codeforces Round 58 (Rated for Div. 2)
A. Minimum Integer 水 #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using name ...
- Codeforces Edu Round 58 A-E
A. Minimum Integer 如果\(d < l\),则\(d\)满足条件 否则,输出\(d * (r / d + 1)\)即可. #include <cstdio> #in ...
随机推荐
- echo 在shell及脚本中显示色彩及闪烁警告效果
在shell脚本编写中,echo用于输出字符串等提示信息,当我们需要格外显示色彩及闪烁效果如下: 一.在执行shell中显示色彩: 语法格式: echo -e "\033[颜色1:颜色2m ...
- 监控MySQL或Web服务是否正常
在工作中,我们往往利用脚本定时监控本地.远端数据库服务端或Web服务是否运行正常,例如:负载高.cup高.连接数满了等.... 方法一:根据端口 本地:netstat/ss/lsof ① nets ...
- GitHub-分支管理02-BUG与Feature分支
参考博文:廖雪峰Git教程 1. Bug分支 软件开发中,bug就像家常便饭一样.有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并 ...
- Java入门(七):方法
方法,在日常生活中可以理解成解决问题或处理事情的技巧,一个方法的形成,需要思考和分析,从而形成一步一步的步骤,最后在实际执行过程中验证自己的思路.在Java中,方法的形成亦是如此. 方法,指用于封装一 ...
- Python爬虫-02:HTTPS请求与响应,以及抓包工具Fiddler的使用
目录 1. HTTP和HTTPS 1.1. HTTP的请求和响应流程:打开一个网页的过程 1.2. URL 2. 客户端HTTP请求 3. Fiddler抓包工具的使用 3.1. 工作原理 3.2. ...
- 力扣算法题—050计算pow(x, n)
#include "000库函数.h" //使用折半算法 牛逼算法 class Solution { public: double myPow(double x, int n) { ...
- 【漫画解读】HDFS存储原理
根据Maneesh Varshney的漫画改编,以简洁易懂的漫画形式讲解HDFS存储机制与运行原理,非常适合Hadoop/HDFS初学者理解. 一.角色出演 如上图所示,HDFS存储相关角色与功能如下 ...
- Java中String对象两种赋值方式的区别
本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过“字面量”赋值 ...
- tensorflow中的name_scope, variable_scope
在训练深度网络时,为了减少需要训练参数的个数(比如LSTM模型),或者是多机多卡并行化训练大数据.大模型等情况时,往往就需要共享变量.另外一方面是当一个深度学习模型变得非常复杂的时候,往往存在大量的变 ...
- 深度学习之Attention Model(注意力模型)
1.Attention Model 概述 深度学习里的Attention model其实模拟的是人脑的注意力模型,举个例子来说,当我们观赏一幅画时,虽然我们可以看到整幅画的全貌,但是在我们深入仔细地观 ...