题目链接:http://acm.hi-54.com/problem.php?pid=2106
思路就是暴力,但是好像能用线段树写,但是我没写出来,以后写出来的话再上代码吧。
来源:河南省第十一届省赛
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct Node{
int x,y;
}Edge[10005];
int T,n,m,s,f;
int pre[10005];
int main()
{
scanf("%d",&T);
while(T--){
memset(pre,0,sizeof(pre));
scanf("%d%d%d%d",&n,&m,&s,&f);
f--;
for(int i=0;i<n;i++){
scanf("%d",&Edge[i].x);
}
for(int i=0;i<n;i++){
scanf("%d",&Edge[i].y);
Edge[i].y--;
}
for(int i=0;i<n;i++){
if(Edge[i].x > f || Edge[i].y < s)continue;
int L = max(Edge[i].x , s);
int R = min(Edge[i].y , f);
for(int j=L;j<=R;j++){
pre[j]++;
}
}
int Max = -1;
int Min = 0x3f3f3f3f;
for(int i=s;i<=f;i++){
if(Max < pre[i])Max = pre[i];
if(Min > pre[i])Min = pre[i];
}
if(Min < m)printf("NO %d\n",Min);
else{
printf("YES %d\n",Max);
}
}
return 0;
}