벡터 배열이 다음과 같은 규칙에 따라 정렬된다고 가정합니다. A [i] (a, b)의 모든 쌍과 A c, d)를 A [j] a> c 및 b> d에 대입하면된다. 입력 배열은 소트되고 있다고 보여집니다. 이제 위의 유형의 배열, 쌍의 벡터 배열에 대한 하한 함수 <int, int>
A[0] = (0,1)
A[1] = (4,3), (2,5)
A[2] = (12,4), (10, 6)
...
지금 어떻게 붙박이 LOWER_BOUND 기능을 사용하여 LOWER_BOUND를 찾을 입력으로 한 쌍을 부여. 코드를 작성했으나
error을 제공합니다. 내가 뭘 놓치고 있니?
template<class FI, class T, class Comp>
FI lower_bound(FI first, FI last, const T& value, Comp comp);
그래서, 당신은 네 번째 인수로 비교기를 전달할 수 있습니다 :
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<int,int> mypair;
vector <mypair> A[100008];
mypair B;
bool operator < (const mypair &a1, const mypair &a2){
return (a1.first < a2.first && a1.second < a2.second);
}
bool operator < (const vector<mypair> &a1, const mypair &a2){
for(int i = 0; i< a1.size();i++){
if (a1[i] < a2)
return true;
}
return false;
}
bool operator < (const mypair &a1, const vector<mypair> &a2){
for(int i = 0; i< a2.size();i++){
if(a1 < a2[i])
return true;
}
return false;
}
int main()
{
int N,x,y;
scanf("%d",&N);
int cnt = 0;
for(int i=0;i<N;i++){
scanf("%d %d",&x,&y);
B = make_pair(x,y);
// consider A as filled up as stated
x = lower_bound(A,A+N,B) - A;
}
return 0;
}
도 작동 할 수는 데이터 구조를,하지만 당신은 제안 할 수 있습니다 모든 편집 때문에 벡터 배열을 얻을 수 있습니까? –
누가 처음부터 바로 벡터가 정렬되도록 값을 입력 할 것인가? lower_bound를 사용하려면 먼저 배열을 정렬해야합니다. 왜냐하면 이진 검색을 기반으로하는 알고리즘이기 때문입니다. –
@PhilipStuyck 주요 문제는 lower_bound 부분과 관련이있어서 정렬 된 입력으로 문제를 테스트하고있었습니다. –