lightoj 1100 - Again Array Queries 【思维题】
来源:互联网 发布:手机android编程软件 编辑:程序博客网 时间:2024/06/05 08:10
Given an array with n integers, and you are given two indices i and j (i ≠ j) in the array. You have to find two integers in the range whose difference is minimum. You have to print this value. The array is indexed from 0 to n-1.
Input
Input starts with an integer T (≤ 5), denoting the number of test cases.
Each case contains two integers n (2 ≤ n ≤ 105) and q (1 ≤ q ≤ 10000). The next line contains n space separated integers which form the array. These integers range in [1, 1000].
Each of the next q lines contains two integers i and j (0 ≤ i < j < n).
Output
For each test case, print the case number in a line. Then for each query, print the desired result.
Sample Input
Output for Sample Input
2
5 3
10 2 3 12 7
0 2
0 4
2 4
2 1
1 2
0 1
Case 1:
1
1
4
Case 2:
1
Notes
Dataset is huge, use faster I/O methods.
题意:给你n个数和q次查询,每次查询区间[i, j]里面所有数 两两间的最小差值。
思路:由于所有数范围(1 —— 1000)我们可以用cnt记录区间里面每个数出现的次数,然后从前向后扫一遍所有数,只要某个数出现次数大于2,最小差值就为0;出现次数为1,那么逐个更新。
AC代码:
#include <cstdio>#include <cstring>#include <algorithm>#define INF 0x3f3f3f3f#define MAXN 100100using namespace std;int cnt[1001];int num[MAXN];int kcase = 1;void solve(){ int n, q; scanf("%d%d", &n, &q); for(int i = 0; i < n; i++) scanf("%d", &num[i]); printf("Case %d:\n", kcase++); while(q--) { int a, b; scanf("%d%d", &a, &b); if(b - a + 1 > 1000) printf("0\n"); else { memset(cnt, 0, sizeof(cnt)); for(int i = a; i <= b; i++) cnt[num[i]]++; int pre = 0; int ans = INF; bool flag = false; for(int i = 1; i <= 1000; i++) { if(flag) break; if(cnt[i] >= 2) { flag = true; break; } else if(cnt[i] == 1) { if(pre == 0) pre = i; else { ans = min(ans, i - pre); if(ans == 0) flag = true; pre = i; } } } if(flag) ans = 0; printf("%d\n", ans); } }}int main(){ int t; scanf("%d", &t); while(t--){ solve(); } return 0;}
- lightoj 1100 - Again Array Queries 【思维题】
- LightOJ 1100 - Again Array Queries
- Lightoj 1100 - Again Array Queries (枚举剪枝)
- LightOJ 1100 - Again Array Queries【巧用数组】求最接近的两个数
- light oj 1100 - Again Array Queries
- 1100 - Again Array Queries (鸽笼定理)
- lightoj1100 - Again Array Queries
- lightOJ 1082 Array Queries
- lightoj 1369 - Answering Queries 【思维】
- LightOJ - 1082 Array Queries(RMQ)
- LightOJ 1082 Array Queries RMQ
- lightoj 1369 - Answering Queries (思维规律)
- LightOJ 1082 - Array Queries【线段树最值】
- LightOJ Array Queries 1082【线段树求区间最值】
- lightOJ 1082 - Array Queries 【线段树(求最小值)】
- Light oj-1100 - Again Array Queries,又是这个题,上次那个题用的线段树,这题差点就陷坑里了,简单的抽屉原理加暴力就可以了,真是坑~~
- 1188 - Fast Queries Lightoj
- lightoj 1369 - Answering Queries
- Hibernate-检索策略
- 网上下载一个开源项目,但是缺失jar包怎么办
- Xcode7中CocosPods 编译报错
- [LeetCode] Move Zeroes
- LuaJava:跟着LuaJava一步一步学习JNI -1
- lightoj 1100 - Again Array Queries 【思维题】
- win7安装ubuntu双系统,建议使用u盘安装
- MFC获取系统时间
- JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
- 相对布局的layout_alignLeft属性
- 飞机订票系统客户端-分段截断异常处理
- OnTouchListener的用法
- html复选框选中事件
- LightOJ 1100 - Again Array Queries【巧用数组】求最接近的两个数