Я не могу равняться на равных - PullRequest
0 голосов
/ 18 апреля 2020

Итак, у меня есть этот код, в котором я печатаю нижний, верхний и равный диапазон, но IDK, как печатать равный диапазон, если кто-то знает, как я хочу, чтобы было представлено кодированное решение, спасибо

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;
typedef vector<long long> vi;
typedef pair<long long,long long> pi;
typedef vector<pi> vpi;

#define FOR(i, a, b) for(ll i=ll(a); i<ll(b); i++)
#define ROF(i, a, b) for(ll i=ll(a); i>=ll(b); i--)
#define f first
#define s second
#define pb emplace_back
#define mp make_pair
#define SQ(a) (a)*(a)
#define all(a) (a).begin(), (a).end()

int main() {
    ll n,x=6,s;
    cin>>n;

vi ar;

FOR(i,0,n)cin>>s; ar.pb(s);

auto a = lower_bound(all(ar), x)-ar.begin();

auto b = upper_bound(all(ar), x)-ar.begin();

auto c = equal_range(all(ar), x);

cout<<"lower_bound "<<a<<' '<<"upper_bound"<<' '<<b<<' '<<"equal range.first"<<' '<<c.f<< ' '<<"equal range.second"<<' '<<c.s<<"\n";
    return 0;
}

1 Ответ

0 голосов
/ 18 апреля 2020

Если я правильно понял, то вы имеете в виду следующее

cout << "lower_bound " << a <<' '
     << "upper_bound " <<' '<< b <<' '
     << "equal range.first " << ' ' << c.f - ar.begin() << ' '
     << "equal range.second" << ' ' << c.s - ar.begin() << "\n";

Обратите внимание на то, что вместо таких выражений, как, например,

c.f - ar.begin()

, лучше использовать Стандартная функция std::distance объявлена ​​в заголовке <iterator>. Например,

std::distance( ar.begin(), c.f )

Имейте в виду, что вводить макросы, которые скрывают общеизвестные стандартные конструкции и идентификаторы, - плохой стиль программирования.

...