Light oj-1100 - Again Array Queries,又是这个题,上次那个题用的线段树,这题差点就陷坑里了,简单的抽屉原理加暴力就可以了,真是坑~~
1100 - Again Array Queries
->
Link <-
又是这种区间查询最值问题,题目意思是要使得这个区间的两个数的差值最小值,上次那个题用的线段树和RMQ水过,不过这题如果要求出区间最值还没什么问题,不过却要求差值最小值,这用RMQ或线段树可怎么做,于是,,,,,,于是,,,,,上网找了找思路,原来还真不是什么线段树、RMQ,而是一个简单的暴力就可以了, 我的天,这要是用前面所提的算法做也就直接陷坑里了;
暴力思路就不用说了吧,直接全部枚举区间所有差值求出最小值,但有个小知识点在这里,所以写篇博客题一下,我们千万注意题目数据范围,虽然查询次数较多,但输入的数据在1000以内,也就是说,如果查询的区间大于1000,那么必有重复元素,这时最小值直接就是0了(注意题意差值应当为正值,所以0是所有差值最小的),这就是所谓的鸽巢原理,即抽屉原理;什么意思呢,假如一年有10个苹果,有9个箱子,要使得这些苹果都能装进箱子里那么有一个盒子必然至少有两个苹果;再比如,一年365天,有366个人,那么必然有两个人生日是同一天;懂了吧,题目数据范围在1000内,如果查询区间大于1000,那么必然有相同的元素,元素个数可以很多,但元素都在1000以内;
所以这题只要注意区间大小这里就没什么问题,不然,,,果断超时~~~来看简短代码:
const int N=100000+10;
int a[N],v[N];
int main()
{
int t,n,k,i,j;
scanf("%d",&t);
int t1=t;
while(t--)
{
scanf("%d%d",&n,&k);
for(i=0; i<n; i++)
scanf("%d",&a[i]);
printf("Case %d:\n",t1-t);
int x,y;
while(k--)
{
memset(v,0,sizeof(v));
scanf("%d%d",&x,&y);
if(abs(y-x)>1000)//查询区间大于1000则必有相同的元素-----抽屉原理,不用则超时;
{
printf("0\n");
continue;
}
j=0;
for(i=x; i<=y; i++)
v[j++]=a[i];
sort(v,v+j);
int xx=unique(v,v+j)-v;//排序后去重,此函数多次介绍,这里不在赘述;
if(xx!=j)//如果去重后元素个数减小了,说明此区间有相同的元素;
printf("0\n");
else
{
int minn=100000;
for(i=1; i<j; i++)//暴力枚举所有差值,注意已经上面已经排好序了, 所以相邻差值是最小的;
minn=min(minn,v[i]-v[i-1]);
printf("%d\n",minn);
}
}
}
return 0;
}
Light oj-1100 - Again Array Queries,又是这个题,上次那个题用的线段树,这题差点就陷坑里了,简单的抽屉原理加暴力就可以了,真是坑~~的更多相关文章
- light oj 1100 - Again Array Queries(暴力,鸽巢原理)
http://lightoj.com/volume_showproblem.php?problem=1100 刚一看到这题,要询问这么多次,线段树吧,想多了哈哈,根本没法用线段树做. 然后看看数据范围 ...
- Light oj 1100 - Again Array Queries (鸽巢原理+暴力)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1100 给你n个数,数的范围是1~1000,给你q个询问,每个询问问你l到r之间 ...
- Lucky Array CodeForces - 121E (线段树,好题)
题目链接 题目大意: 定义只含数字$4,7$的数字为幸运数, 给定序列, 区间加正数, 区间询问多少个幸运数 题解: 对于每一个数, 求出它和第一个比它大的幸运数之差, 则问题转化为区间加,查询$0$ ...
- 洛谷OJ U552 守墓人 线段树模板题
题目描述 Description 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然... ...
- Light OJ-1082 - Array Queries,线段树区间查询最大值,哈哈,水过~~
...
- lightoj Again Array Queries
1100 - Again Array Queries PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 32 ...
- AC日记——Array Queries codeforces 797e
797E - Array Queries 思路: 分段处理: 当k小于根号n时记忆化搜索: 否则暴力: 来,上代码: #include <cmath> #include <cstdi ...
- [Codeforces 266E]More Queries to Array...(线段树+二项式定理)
[Codeforces 266E]More Queries to Array...(线段树+二项式定理) 题面 维护一个长度为\(n\)的序列\(a\),\(m\)个操作 区间赋值为\(x\) 查询\ ...
- codeforces 719E E. Sasha and Array(线段树)
题目链接: E. Sasha and Array time limit per test 5 seconds memory limit per test 256 megabytes input sta ...
随机推荐
- 题解报告:hdu 1039 Easier Done Than Said?
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1039 Problem Description Password security is a trick ...
- 解决asp.net 以及MVC中上传文件大小限制的问题
﹤system.web﹥ ﹤httpruntime requestlengthdiskthreshold="256" maxrequestlength="2097151& ...
- Android开发学习——ButterKnife使用
为了码代码的效率,我们有了ButterKnife;其基本使用如下步骤: 1.在Android Studio的Setting中,下载plugin 2.在整个Project的build.gradle中添加 ...
- 设置电脑IP
1.首先在Win7桌面上找到“网络”入口,如下图: 进入Win7网络 2.进入网络之后我们再点击顶部的“网络共享中心”,如下图: 进入Win7网络共享中心 3.进入Win7网络共享中心之后,我 ...
- java 对象流的简单使用
对象的输入输出流的作用: 用于写入对象 的信息和读取对象的信息. 使得对象持久化. ObjectInputStream : 对象输入流 ObjectOutPutStream :对象输出流 ...
- android中使用图文并茂的按钮
代码: <LinearLayout android:orientation="horizontal" android:layout_width="match_par ...
- web.xml 加载顺序
参考网址: 上下文对象>监听>过滤器>servlet 1.先加载上下文对象 <!-- 初始化Spring classpath*:spring/applicationContex ...
- Java的知识储备及面试-几个方面
1.Java本身语法基础 https://github.com/Snailclimb/JavaGuide/blob/master/Java%E7%9B%B8%E5%85%B3/Java%E5%9F%B ...
- jmeter 连接 sqlite 进行压力测试
- 5.4QBXT 模拟赛 (Rank1 机械键盘 蛤蛤)
NOIP2016提高组模拟赛 ——By wangyurzee7 中文题目名称 纸牌 杯具 辣鸡 英文题目与子目录名 cards cups spicychicken 可执行文件名 cards cups ...