专栏文章
CF2171D 题解
CF2171D题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @min335wr
- 此快照首次捕获于
- 2025/12/01 19:46 3 个月前
- 此快照最后确认于
- 2025/12/01 19:46 3 个月前
题目相当于判断:将所有满足 且 的 和 连边,最后所有点是否在同一个连通块中。
我们把 分成两个部分 ,一开始, 里面没有数, 里面有所有数。
然后,我们从 到 不断地将 从 中移除,加入到 中。
时,如果 ,那么 不可以和后面的任何数连边,否则可以连边。
在 时可以连边: 的前提下, 时,如果 ,说明 且 为 中 的最大值,那么 不可能和后面的点连边。
以此类推,我们只要不断比较 和 即可。时间复杂度 。
AC Code
CPP#include <iostream>
#include <set>
using namespace std;
const int maxn = 2e5+5;
int t,n,a[maxn];
set<int>S1,S2;
int main(){
cin >> t;
while(t--){
cin >> n;
S1.clear();S2.clear();
for(int i = 1;i<=n;i++){
cin >> a[i]; S2.insert(a[i]);
}
bool flag=true;
for(int i = 1;i<n;i++){
S1.insert(a[i]); S2.erase(a[i]);
if(*S1.begin() > *S2.rbegin()){
flag = false;break;
}
}
if(flag)cout<<"Yes\n"; else cout <<"No\n";
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...