全部WA求助(贪心二分)
查看原帖
全部WA求助(贪心二分)
304679
Blackmoree楼主2025/8/5 17:56
#include <bits/stdc++.h>
using namespace std;
int lowerbound(const vector<int>& arr,int target){
	int left=0,right=arr.size(),result;
	while (left<right){
		int mid=(left+right)>>1;
		if (arr[mid]<target){
			result=mid;
			right=mid-1;
		}
		else left=mid+1;
	}
	return result;
}
int upperbound(const vector<int>& arr,int target){
	int left=0,right=arr.size(),result;
	while (left<right){
		int mid=(left+right)>>1;
		if (arr[mid]>=target){
			result=mid;
			right=mid-1;
		}
		else left=mid+1;
	}
	return result;
}
int main(){
	int num;
	vector<int> h,g(1,-2e9),p(1,2e9);
	while (cin>>num){
		h.push_back(num);
		if (cin.peek()=='\n') break;
	}
	if (h.empty()) return 0;
	for (int i=0;i<h.size();i++){
		if (h[i]<=g.back()) g.push_back(h[i]);
		else g[lowerbound(g,h[i])]=h[i];
	} 
	cout<<g.size()<<endl;
	for (int i=0;i<h.size();i++){
		if (h[i]>p.back()) p.push_back(h[i]);
		else p[upperbound(p,h[i])]=h[i];
	} 
	cout<<p.size()<<endl;
	
	return 0;
} 

我感觉自己思路没错,但交了全WA,help

2025/8/5 17:56
加载中...