5576. 区间之内 - AcWing题库
#include<iostream>
using namespace std;
int main()
{
int l,r,x;
cin>>l>>r>>x;
if(x>=l&&x<=r)
cout<<"YES";
else
cout<<"NO";
return 0;
}
5577. 有效图 - AcWing题库
阅读此题,细细思考,我们可以发现要想满足题目中的条件,那么每个子连通图都必须是完全图,那么每个点的度就等于这个连通块点的数量减一,可以使用并查集来维护连通块点的数量。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=150010;
int p[N],s[N],st[N];
int find(int x)
{
if(p[x]!=x)
p[x]=find(p[x]);
return p[x];
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
p[i]=i;
s[i]=1;
}
for(int i=0;i<m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
st[a]++,st[b]++;
a=find(a),b=find(b);
if(a!=b)
{
p[a]=b;
s[b]+=s[a];
}
}
for(int i=1;i<=n;i++)
{
int x=find(i);
if(s[x]-1!=st[i])
{
puts("NO");
return 0;
}
}
puts("YES");
return 0;
}
5578. 切蛋糕 - AcWing题库
仔细阅读此题我们可以发现,无论是切割X轴或者Y轴,它们是互不干扰的,也就是说我们只需找出每次切割后X轴区间的最大值和Y轴区间的最大值即可,我们可以使用map来存以及更新区间最大值。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
set<int> X,Y;
map<int,int> mx,my;
void cut(set<int> &s,map<int,int> &m,int x)
{
auto i=s.lower_bound(x);
auto j=i--;
s.insert(x);
m[*j-*i]--;
if(m[*j-*i]==0)
m.erase(*j-*i);
m[*j-x]++;
m[x-*i]++;
}
int main()
{
int w,h,n;
cin>>w>>h>>n;
X.insert(0),X.insert(w);
Y.insert(0),Y.insert(h);
mx[w]++,my[h]++;
for(int i=0;i<n;i++)
{
char ch;
int m;
scanf("%s %d",&ch,&m);
if(ch=='X')
cut(X,mx,m);
else
cut(Y,my,m);
printf("%lld\n",(LL)mx.rbegin()->first * my.rbegin()->first);
}
return 0;
}