NOJ 1042区间最值

    xiaoxiao2024-07-24  15

    区间最值

    Time Limit(Common/Java) :  1000 MS/ 3000 MS          Memory Limit : 65536 KByte Total Submit : 1151            Accepted : 268 

    Description

    给定一个长度不超过10000的整数序列,对这个序列有不超过500000个询问,每次询问给定区间之内的最小值.

    Input

    第一行一个整数N(N<=10000) 第二行N个整数 第三行一个整数Q 以下共Q,每行两个整数i,j用空格隔开,询问第i号元素到第j号元素之间的最小值

    Output

    每个询问输出一行,包含一个整数,为询问区间内的最小值

    Sample Input

    5 1 2 3 4 5 2 1 5 3 4

    Sample Output

    1 3

    Source

    NUAA

    看到题目第一反应是二分,但仔细想想有点不对劲,因为二分查找是针对于有序数组的,这题显然是无序的,所以要么很难要么很水【手动笑哭脸】,显然这题不难,只要弄个结构体记录一下序号,然后把数组从小到大排个序,最后就可以从前往后依次比对一下看哪个数的序号最先落在所求区间内,所找的这个数就是答案。

    #include<cstdio> #include<algorithm> #include<iostream> using namespace std; struct data { int ord; int val; } num[10005]; bool cmp(data d1,data d2) { return d1.val<d2.val; } int main() { int N; scanf("%d",&N); for(int i=0; i<N; i++) { scanf("%d",&num[i].val); num[i].ord=i; } sort(num,num+N,cmp); int Q; scanf("%d",&Q); int s,e; while(Q--) { scanf("%d%d",&s,&e); for(int i=0;i<N;i++) { if(num[i].ord>=(s-1)&&num[i].ord<=(e-1)) { printf("%d\n",num[i].val); break; } } } }

    转载请注明原文地址: https://ju.6miu.com/read-1290978.html
    最新回复(0)