文章

34

粉丝

179

获赞

13

访问

184.9k

头像
浙江工商大学problem 134
备考心情
发布于2022年2月27日 22:35
阅读数 5.9k

time out limit exceeded  时间复杂度太高(未AC) 

思路是每查一次就要寻找这个区间的最小值。

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int a[100005];
int main(){
    int n;
    int q;  //查询次数
    int l,r; //区间
    while(scanf("%d",&n)!=EOF){
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        } //存数据
        scanf("%d",&q);
        while(q--){
            scanf("%d %d",&l,&r);
            int min=a[l];
            for(int i=l;i<=r;i++){
                if(a[i]<min) min=a[i];
            }
            printf("%d\n",min);
        }
    }
    return 0;

}

AC

这个方法也很妙,基本思想是用结构体存数据和所在的下标位置,然后排序(小到大),然后就可以找排好序的第一个满足区间条件的值,即为最小值。 

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef struct{
    int data;  //用来存数据
    int index; //用来存所在的下标
}info;
bool cmp(info a,info b){
    return a.data<b.data;
}
 
int main(){
    int n;
    info a[10000...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发