文章
34
粉丝
179
获赞
13
访问
199.0k
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...
登录后发布评论
暂无评论,来抢沙发