首页 > 其他分享 >P2782 友好城市题解

P2782 友好城市题解

时间:2023-03-12 13:56:24浏览次数:75  
标签:return 友好城市 题解 线段 LIS long int P2782 res

题目传送门

题意:给定一些上下的线段,求出最多不相交的线段数量。

一开始看错题了,以为是给定一堆线段,求出线段最大不交数量,然后就写了一个树状数组优化\(dp\)结果样例都不过,才发现自己看错题了。

在草稿纸上画了画,发现排序后答案就是 \(LIS\) 的长度,但是不想重新去写二分了,就用树状数组写了个 \(LIS\) ,个人觉得树状数组/线段树优化的 \(LIS\) 比二分好理解些?

code

#include <bits/stdc++.h>
#define lowbit(x) x & (-x)
using namespace std;
typedef long long ll;
typedef long long ull;
const int N = 2e5 + 5, M = 1e6 + 5, INF = 0x3f3f3f3f;
const ll mod = 1e9 + 7;

int n, mx;
int tr[M];
int f[N];
struct seg
{
	int l, r;
}a[N];

bool cmp(seg a, seg b)
{
	if(a.r == b.r) return a.l < b.l;
	return a.r < b.r;
}

void add(int x, int val)
{
	while(x <= mx)
	{
		tr[x] = max(tr[x], val);
		x += lowbit(x);
	}
}

int query(int x)
{
	int res = 0;
	while(x > 0)
	{
		res = max(res, tr[x]);
		x -= lowbit(x);
	}
	return res;
}

int main()              //主函数
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n;
	for(int i = 1;i <= n;i ++)
		cin >> a[i].l >> a[i].r, mx = max(mx, a[i].r);
	sort(a + 1, a + 1 + n, cmp);
	int res = 0;
	for(int i = 1;i <= n;i ++)
	{
		f[i] = query(a[i].l) + 1;
		add(a[i].l, f[i]);
		res = max(res, f[i]);
	}
	cout << res << '\n';
    return 0;
}

标签:return,友好城市,题解,线段,LIS,long,int,P2782,res
From: https://www.cnblogs.com/Svemit/p/17208065.html

相关文章

  • CF1785D Range = √Sum 题解
    题目传送门(第一次CF场切绿欸)题意考虑将这段序列的平均数设为\(4n\),那么总和就会是\(4n^2\),这时候就需要让最值差等于\(2n\),直接让他等于\(3n\)和\(5n\)就可......
  • 【题解】CF1801G A task for substrings
    考虑拆开贡献,前缀贡献痕容易算。而跨越\([l-1,l]\)的贡献,考虑在正串ACAM找到\([1,l-1]\),反串ACAM找到\([l,r]\),那么要做的就是在两串的fail链祖先上,找到能凑成完......
  • 2020 年百度之星·程序设计大赛 · 官方题解汇总
    1、测试赛2、初赛一留个备份,方便以后找3、初赛二4、初赛三5、复赛......
  • P1149 [NOIP2008 提高组] 火柴棒等式 题解
    [NOIP2008提高组]火柴棒等式题目描述给你\(n\)根火柴棍,你可以拼出多少个形如\(A+B=C\)的等式?等式中的\(A\)、\(B\)、\(C\)是用火柴棍拼出的整数(若该数非零,则最高......
  • 题解 ABC293D【Tying Rope】
    颜色是不好处理的,我们不妨不区分绳子的两个端点,将每条绳子作为一个节点,每条边直接将两个节点连接起来。每个绳子的端点本质上是保证了每个点的度数不超过\(2\),也就是说图......
  • 题解 ABC293E【Geometric Progression】
    由于模数不一定是大质数,我们不能直接套等比数列求和公式。换一种思路,数列\(\langle1,A,A^2,\cdots,A^{X-1}\rangle\)可以看做线性递推,因此设计矩阵:\[\boldsymbolT=\b......
  • 题解 ABC293F【Zero or One】
    我们可以暴力检查进制数不超过\(B\)的是否符合要求;然后对于进制数大于\(B\)的,位数不超过\(\log_BN\),可以暴力枚举每一位的值然后二分进制数检查。代码中\(B=10^3\)......
  • 题解 ABC293G【Triple Index】
    莫队板子。类似于小B的询问,在移动指针过程中,维护每个数出现次数\(cnt_i\),同时维护\(\sum\binom{cnt_i}{3}\)即可。取序列分块块长\(B=\frac{n}{\sqrt{m}}\),有最优......
  • [ABC293E] Geometric Progression 题解
    [ABC293E]GeometricProgression题解神中神数论题目描述给定整数\(A,X,M\),求\[\sum_{i=0}^{X-1}A^i\bmodM\]\(1\leA,M\le10^9\)\(1\leX\le10^......
  • UVA12107 题解
    前言题目传送门!更好的阅读体验?很久以前的一道搜索大模拟题目,另一篇题解的写法有点鬼畜,所以就来补篇题解。题面给你一个数字谜。修改最少次数(每次修改一个数位为空格或......