首页 > 其他分享 >P3657 题解

P3657 题解

时间:2023-10-24 09:04:22浏览次数:32  
标签:typedef const int 题解 P3657 long 端点

是不是有点恶意评分了

题目链接

Sol

看完题目就想到了这个题

这道题同样是求线段,不过这个加了点限制,发现一个点最多连 4 条边出去,暴力连边的复杂度是正确的,于是就把这题变成黄了

利用刚刚那道题的 trick,把边按左端点排序后右端点的 LIS 就是答案。

这里给一个更方便的做法,不用真的去连边,直接扫左端点是自动排序好了的,记录每个编号的位置,然后用树状数组 dp 就好。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
const int N = 1e5 + 5, INF = 0x3f3f3f3f;
const LL mod = 1e9 + 7;
int n;
int a[N], b[N], p[N], f[N];
int c[N];
void modify(int x, int v) {
	for(; x <= n; x += x & -x) c[x] = max(c[x], v);
}
int query(int x) {
	int res = 0;
	for(; x; x -= x & -x) res = max(res, c[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];
	}
	for(int i = 1; i <= n; i ++) {
		cin >> b[i];
		p[b[i]] = i;
	}
	for(int i = 1; i <= n; i ++) {
		queue<int> tmp;
		for(int j = max(1, a[i] - 4); j <= min(n, a[i] + 4); j ++)
			tmp.push(query(p[j] - 1) + 1);
		for(int j = max(1, a[i] - 4); j <= min(n, a[i] + 4); j ++)
			modify(p[j], tmp.front()), tmp.pop();
	}
	cout << query(n) << '\n';
    return 0;
}

注意 dp 的过程中不能刚查询完就改,需要把 \(i\) 能找到的所有记录下来最后一起改,不然可能会计算从 \(i\) 有两条出边的答案。

标签:typedef,const,int,题解,P3657,long,端点
From: https://www.cnblogs.com/Svemit/p/17783908.html

相关文章

  • P2679 [NOIP2015 提高组] 子串 题解
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintMOD=1000000007;intn,m,k,dp[205][205][2];charA[1005],B[205];signedmain(){cin.tie(0)->sync_with_stdio(0);cin>>n>>m>>k;cin......
  • P9754 [CSP-S 2023] 结构体 题解
    考前内心OS:“CCF不会出大模拟吧(((”。前置声明辅助函数:偏移量考虑一个结构体的偏移量。已知首个空地址\(\mathrm{address}\)和该结构体的对齐要求\(\mathrm{align}\),则该结构体正确的起始地址为\(\mathrm{\lceiladdress/align\rceil\timesalign}\)。i64shiftToAl......
  • CF1710 题解
    CF1710题解A看图写话。想象一个格子以及周围同色格的颜色必须呈一个三叉的形状:################这些三叉拼起来最小的形状,就是两个以上的整行,或整列。所以遍历每一种颜色,通过整......
  • CSP-S 2023 游记 & 总结 & 题解
    游记到了机房发现是Windows10,感觉不错。比赛开始果断启动虚拟机,怎么今年PDF密码这么复杂啊,我记得去年挺简单的来着,好像是believe2022?看了一遍题,有理由怀疑T1是J的题,但是一开始读错了,以为只能转一下,后来计算转动幅度的时候忘记对\(10\)取模,怒调1h。T2一开始以为是容......
  • 【题解】CF1710 合集
    CF1710AColorthePicture标签:思维题\(C^-\)典型的有图有真相,嘻嘻(抽风了?显然有一个结论,我们颜色要么一行一行天,要么一列一列填。并且填进去的颜色必须不少于两行/列然后就是记一个ans和一个over表示如果每个颜色都两行/列填进去能填的最多列数,以及两行/列填进去后还能......
  • Educational Codeforces Round 144(CF1796 D~E) 题解
    D.MaximumSubarray题目链接十分钟秒了一道*2000,非常爽,但是个人感觉确实非常简单。下面令\(b_i=a_{i}-x\),\(b_i'=a_i+x\)。因为\(k<=20\),因此考虑一个复杂度与\(k\)相关的做法。不妨dp:设\(f_{i,j,0/1}\)表示考虑了前\(i\)个数,对\(j\)个数加上了\(x\),第\(i\)......
  • CF1893E题解
    分析第一眼:博弈论。第二眼:呃……贪心?实际:DP。首先想这个游戏大抵存在必胜策略,否则不会让我们求。思考先手必胜条件,就是如何让这个数组最后只剩下一个数。设数列之和为\(sum\)。发现每次操作给两个数减的数字是一样的。那么对于每次操作,\(\Deltasum\)都为两者之间更少的......
  • CSP-S 2023 种树-题解
    CSP-S2023种树-题解闲话Mark.Down看错题面了,我一直以为树是倒着长的。题目描述给定一棵树,每天可以选择一个与已种树的地块相连的地块种树,每棵树每天会长\(max(1,c_i\timesx+b_i)\)米(\(x\)代表从任务开始第一天的天数),问最少多少天可以使\(\foralli\inn,Height_i\gea_i\)......
  • P8820(csp-s 2022 T4)题解
    背景:由于FZ考试因疫情取消,于是我们学校组织了线上测试。赛场连假做法都没打完,然后暴力忘记交了。。。题目链接参考博客题目评价:场切有点困难,但是76分比较容易。解法一眼\(ddp\),没话说。下面假设树以\(1\)为根。一次传输称作从一个点跳到另一个点。设询问的两个点为\(......
  • 题解合集
    CF1846:CF1846ACF1846BCF1846CCF1846DCF1846E......