对于一个数组a,记cnt_min为数组a中最小值出现的次数, cnt_max为数组a中最大值出现的次数,请问在所有满足a≤cnt_min≤b且c≤cnt_max≤d的数组中数组长度的最小值是多少。
Input第一行输入一个正整数T,代表测试数据的组数,接下来T行每行四个正整数a,b,c,d,含义如题所述。
1≤T,a,b,c,d≤100000,a≤b,c≤d
Output对于每组数据,输出数组数组长度的最小值。
Sample Input3
3 5 4 6
5 8 5 5
3 3 10 12
Sample Output4
5
13
HINT一个满足样例1的最短数组:[1,1,1,1];
一个满足样例2的最短数组:[2,2,2,2,2];
一个满足样例3的最短数组:[1,2,1,2,2,1,2,2,2,2,2,2,2];
解析:题目就是让我们求一个数组最小值个数要在a,b之间,最大值个数要在c,d之间,满足该条件数组的最小长度,有点类似两个区间求交集的微妙感觉。
分类讨论:1.要是两个区间分离,那么肯定是各取最小值。2.如果有交集,那么输出最小满足两者的那个数,我们想着假如c在ab之间,那么肯定c就是满足两者的最小值,同理a在cd之间,a就是该值。
注意点:两者分离是db。
#includeint main() { int t,a,b,c,d; scanf("%d",&t); while(t--){ scanf("%d%d%d%d",&a,&b,&c,&d); if(c>b||d=a&&c<=b) printf("%dn",c); //c在ab之间 else if(a>=c&&a<=d) printf("%dn",a); //a在zd之间 } return 0; }



