题解:AT_arc182_a [ARC182A] Chmax Rush!
思路
首先题目数据范围
接下来分类讨论:
-
当
的时候,因为在替换的过程中序列元素只增不减,所以任何操作都是可以的。 -
当
的时候,有三种情况。-
当
的时候,这个时候只会让序列 元素越来越小,则这两次操作之间一定冲突。 -
当
的时候,这种情况下,如果这个时候把较大的 直接安排在 右侧,这个时候会导致无论在 哪一边修改都会导致存在元素大于 。则操作 一定替换前 个元素,操作 一定替换从 开始到末尾的元素。 -
当
的时候,按照上面的思路,可以得出操作 一定替换从 开始到末尾的元素,操作 一定替换前 个元素。
-
最后注意如果答案不为
综上所述,时间复杂度为
代码如下
#include <bits/stdc++.h>
#define int long long
using namespace std;
#define rep(i, l, r) for(int i = l; i <= r; ++ i)
#define per(i, r, l) for(int i = r; i >= l; -- i)
const int mod = 998244353, N = 5001;
int Q, a[N], b[N], ans = 1;
main()
{
scanf("%lld %lld", &Q, &Q);
rep(i, 1, Q) scanf("%lld %lld", &a[i], &b[i]);
rep(i, 1, Q)
{
int l = 1, r = 1;
rep(j, 1, i - 1)
if(b[j] > b[i])
{
if(a[j] <= a[i]) l = 0;
if(a[j] >= a[i]) r = 0;
}
rep(j, i + 1, Q)
if(b[j] < b[i])
{
if(a[j] <= a[i]) l = 0;
if(a[j] >= a[i]) r = 0;
}
ans = ans * (l + r) % mod;
}
printf("%lld", ans);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步