为什么错了!
查看原帖
为什么错了!
922691
Hisy楼主2024/1/29 15:19
#include<algorithm>
#include<cstdio>
using namespace std;
int main(int argc,char **argv){
	int maxn,maxm;
	scanf("%d %d",&maxn,&maxm);
	pair<int,int> *data=new pair<int,int>[maxn+1];
	int *queue=new int[maxn+1];
	bool *flag1=new bool[maxn+1];
	bool *flag2=new bool[maxn+1];
	int top1,top2;
	data[0]=make_pair(0,0);
	for(int iter=1;iter<=maxn;++iter){
		scanf("%d %d",&data[iter].first,&data[iter].second);
	};
	sort(data+1,data+1+maxn);
	top1=top2=0;
	for(int iter=1;iter<=maxn;++iter){
		queue[iter]=0;
		flag1[iter]=false;
	};
	for(int iter=1;iter<=maxn;++iter){
		while(data[iter].first-maxm>data[queue[top1]].first&&top1<=top2&&top1<=maxn){
			++top1;
		};
		if(data[queue[top1]].second>=data[iter].second*2){
			flag1[iter]=true;
		};
		while(data[iter].second>data[queue[top2]].second&&top1<=top2&&top2>=0){
			--top2;
		};
		queue[++top2]=iter;
	};
	int answer=0;
	for(int iter=1;iter<=maxn;++iter){
		queue[iter]=0;
		flag2[iter]=false;
	};
	top1=top2=0;
	for(int iter=maxn;iter>=1;--iter){
		while(data[iter].first+maxm<data[queue[top1]].first&&top1<=top2&&top1<=maxn){
			++top1;
		};
		if(data[queue[top1]].second>=data[iter].second*2){
			flag2[iter]=true;
		};
		while(data[iter].second>data[queue[top2]].second&&top1<=top2&&top2>=0){
			--top2;
		};
		queue[++top2]=iter;
	};
	for(int iter=1;iter<=maxn;++iter){
		if(flag1[iter]&&flag2[iter]){
			++answer;
		};
	};
	printf("%d",answer);
	return 0;
};
2024/1/29 15:19
加载中...