这题怎么解,暴力+快读全超时

刘嘉柚  •  2个月前


这题怎么解,暴力+快读超时

TLE代码:

#include<bits/stdc++.h>
const int N=2*1e5;
typedef long long ll;
const int INF=0x7FFFFF;
using namespace std;
ll n,q,k[N],t[N],a[1005],maxn=-INF,minn=INF;
bool flag=0;
template<typename T>
inline void read(T &x){
    bool f=1;x=0;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-') f=!f;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    x=(f?x:-x);return;
}
int main(){
	read(n),read(q);
	for(int i=1;i<=n;i++){
		read(a[i]);
	}
	for(int i=1;i<=q;i++){
		read(t[i]),read(k[i]);
		for(int j=1;j<=n;j++){
			if(t[i]==1&&k[i]<a[j]){
				flag=1;minn=min(a[j],minn);
			}
			else if(t[i]==2&&k[i]>a[j]){
				flag=1;maxn=max(a[j],maxn);
			}
		}
		if(flag&&t[i]==1) printf("%d\n",minn);
		else if(flag&&t[i]==2) printf("%d\n",maxn);
		else printf("-1\n");
		flag=0;
	}
	return 0;
}


评论:

平衡树吧


LYZ  •  2个月前

IEE


公共账号1  •  2个月前

IEE


pony_ma  •  2个月前

可以使用平衡树的求前驱后继操作完成这题(


陈志轩  •  2个月前