首页 > 其他分享 >CF429E Points and Segments 题解

CF429E Points and Segments 题解

时间:2024-10-01 11:33:37浏览次数:5  
标签:typedef ch 题解 Segments long Points FF void define

题目链接

点击打开链接

题目解法

真难啊/yun

把区间染成红色看作区间 \(+1\),染成蓝色看作区间 \(-1\),要求是每个点上的数 \(\in \{-1,0,1\}\)
可以选择的数有 \(-1,1\) 不太好做,我们考虑将限制变成每个点上的数只能为 \(0\)
我们记经过点 \(x\) 的线段数量为 \(cnt_x\)
如果 \(cnt_x\) 是奇数,那么我们添一条线段 \([x,x]\),用来配平,这样就可以保证每个点上的数只能为 \(0\) 了

区间 \(+1/-1\) 仍然不太好做,我们考虑维护其差分数组
那么所有数都为 \(0\) 等价于 差分数组的所有数都为 \(0\)
二元关系考虑建图
我们把每条线段的 \(l_i, r_i+1\) 之间连边,现在的问题变成了给每条边定向,使得每个点出度 \(=\) 入度
这显然跑一遍欧拉回路即可

时间复杂度 \(O(n\log n)\),瓶颈在离散化

#include <bits/stdc++.h>
#define F(i,x,y) for(int i=(x);i<=(y);i++)
#define DF(i,x,y) for(int i=(x);i>=(y);i--)
#define ms(x,y) memset(x,y,sizeof(x))
#define SZ(x) (int)x.size()-1
#define all(x) x.begin(),x.end()
#define pb push_back
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int,int> pii;
template<typename T> void chkmax(T &x,T y){ x=max(x,y);}
template<typename T> void chkmin(T &x,T y){ x=min(x,y);}
template<typename T> void read(T &FF){
    FF=0;int RR=1;char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
    for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
    FF*=RR;
}
const int N=200010;
int n,l[N],r[N],dsc[N],s[N];
int e[3*N],ne[3*N],h[N],idx;
void add(int x,int y){ e[idx]=y,ne[idx]=h[x],h[x]=idx++;}
void add_edge(int x,int y){ add(x,y),add(y,x);}
bool vis[N],tag[3*N],col[3*N];
void dfs(int u){
    vis[u]=1;
    for(int &i=h[u];~i;){
        if(tag[i]){ i=ne[i];continue;}
        tag[i]=tag[i^1]=1,col[i]=1;
        dfs(e[i]);
    }
}
int main(){
    read(n);
    int cnt=0;
    F(i,1,n){
        read(l[i]),read(r[i]);
        dsc[++cnt]=l[i],dsc[++cnt]=r[i]+1;
    }
    sort(dsc+1,dsc+cnt+1);
    cnt=unique(dsc+1,dsc+cnt+1)-dsc-1;
    ms(h,-1);
    F(i,1,n){
        l[i]=lower_bound(dsc+1,dsc+cnt+1,l[i])-dsc;
        r[i]=lower_bound(dsc+1,dsc+cnt+1,r[i]+1)-dsc;
        add_edge(l[i],r[i]);
        s[l[i]]++,s[r[i]]--;
    }
    F(i,1,cnt) s[i]+=s[i-1];
    F(i,1,cnt) if(s[i]&1) add_edge(i,i+1);
    F(i,1,cnt) if(!vis[i]) dfs(i);
    F(i,0,n-1) if(col[i*2]) printf("0 ");else printf("1 ");puts("");
    return 0;
}

标签:typedef,ch,题解,Segments,long,Points,FF,void,define
From: https://www.cnblogs.com/Farmer-djx/p/18442773

相关文章

  • 题解:P11075 不等关系 加强版
    这是洛谷转移过来的题解,作者是4041nofoundGeoge(我自己,记得关注呀)题目大意对于一个字符串s1,s......
  • [HNOI2010] 城市建设 题解
    题意给定一个图,每次修改一条边的边权,每次修改后输出该图的最小生成树边权和,询问间不独立。思路在线不好做,考虑离线下来,可以使用线段树分治。我们称在当前区间\(\left[l,r\right]\)的边为动态边,不在的边为静态边。但这样每次遍历到叶子节点的时候静态边的数量都是\(m\)的......
  • 【洛谷】AT_abc079_d [ABC079D] Wall 的题解
    【洛谷】AT_abc079_d[ABC079D]Wall的题解洛谷传送门AT传送门题解不懂就问,为什么ABC很喜欢出板子题。经典的Floydqaq题目给出了一个二维数组和000~......
  • 题解 CF1785D - Range = √Sum
    link\(\texttt{Describe}\)构造有\(n\)个数的序列,满足以下条件:\(\foralli\in[1,n]\)并且\(1\lea_i\le10^9\)。对于任何的\(1\lei,j\len(i\nej)\),\(a_i\nea_j\)。\((\max_{i=1}^{n}a_i-\min_{i=1}^{n}a_i)^2=\sum_{i=1}^{n}a_i\)。......
  • vscode 运行 C++分文件显示 undefined reference to 问题解决
    一、问题无法关联到对应的方法。  二、结局方法1、第一步,查看.vsode文件夹里面的task.json文件;设置里面参数;${file}改成 ${fileDirname}\\*.cpp 2、第二步 2.1、打开coderunner的setting.json文件; 2.2、将 $fileName改成*.cpp 3.3、最后起哄一下vs......
  • 题解:P11062 【MX-X4-T2】「Jason-1」加法
    考虑两种情况:\(a,b\)符号相同:考虑经过操作后\(a,b,\lverta-b\rvert\)会变成什么。:\(a\)\(b\)\(\lverta-b\rvert\)操作1\(a+b\)\(b\)\(\lverta\rvert\)操作2\(a\)\(a+b\)\(\lvertb\rvert\)可以看出只进行零次或一次操作后可以取到最小值......
  • 题解:P11129 【MX-X5-T1】「GFOI Round 1」Inverted World
    题目要求:\((a_l+\cdots+a_r)\div(r-l+1)\)是整数。即\(\frac{(a_l+a_r)\cdot(r-l+1)\div2}{r-l+1}\)为整数。即\(\frac{(a_l+a_r)}{2}\)为整数。即\(a_l+a_r\)为偶数。即\(m+(l-1)\cdotd+m+(r-1)\cdotd\)为偶数。即\(2m+(l+r-2)\cdotd\)为偶......
  • 大单元综合测试(一):第一章,第二章题解
    \(6.\)已知\(3a>b>0\),则\(\large\frac{a}{3a-b}-\frac{b}{a+b}\)的最小值为多少?基本方法\(\qquad\)对于高中基本不等式,这种分母较为复杂的求最值问题,我们一般都会采用将分母换元换元的方法,理由很自然,因为分式是分子除分母,所以分母形式的简单可以方便我们对问题的处理。那么......
  • AtCoder Beginner Contest 365题解
    A-LeapYear按照题意模拟即可。codeB-SecondBest按照题意模拟即可。codeC-TransportationExpenses考虑当\(x\)增大时,\(\min(x,a_i)=x\)的项会越来越少。换言之,当\(x\)足够大时,\(ans=\suma_i\),若此时\(ans>M\)则说明无论补贴多少,这时答案都是一定的......
  • 常见问题解决 --- 如何解决CROS跨域问题
    问题原因:前后端不是一个服务导致的浏览器禁止访问的安全问题。比如前端部署在http://x.x.x.x:8888,后端部署在http://x.x.x.x:9999,由于端口不一致,浏览器安全起见不允许一个web页面有不同ip或端口的地址发送出流量。在开发者工具可以看出CROS错误。解决办法:关闭浏览器安全策......