Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/120: Рейтинг темы: голосов - 120, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 05.09.2017
Сообщений: 2

В массиве найти количество пар (i, j) таких, что i < j и a[i] > a[j]

05.09.2017, 18:00. Показов 25194. Ответов 3

Студворк — интернет-сервис помощи студентам
Напишите программу, которая для заданного массива A = {a1, a2, . . . , an} находит количество
пар (i, j) таких, что i < j и a[i] > a[j] .
Формат входных данных
Первая строка входного файла содержит натуральное число n (1 <= n <= 50 000) — количество
элементов массива. Вторая строка содержит n попарно различных элементов массива A.
Формат выходных данных
В выходной файл выведите одно число — ответ на задачу.

Написал решение, используя Merge Sort, но на 17 тесте получаю WA.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
using namespace std;
int ans;
void Merge(pair<int,int> a[],int l, int m, int r)
{
    int i = l, j = m+1, q = 0;
    pair<int,int> *temp = new pair<int,int>[r-l+1];
    while (i<=m && j<=r)
    {
        if (a[i].second<a[j].second && a[i].first > a[j].first)
        {
            ans += (m-i+1);
        }
        if (a[i].first<a[j].first)
        {
            temp[q++] = {a[i].first,a[i].second};
            ++i;
        }
        else
        {
            temp[q++] = {a[j].first,a[j].second};
            ++j;
        }
    }
    while(i<=m)
    {
        temp[q++] = {a[i].first,a[i].second};
        ++i;
    }
    while(j<=r)
    {
        temp[q++] = {a[j].first,a[j].second};
        ++j;
    }
    for (int q=0;q<r-l+1;++q){
        a[l+q] = {temp[q].first,temp[q].second};
    }
    delete[] temp;
}
void MergeSort(pair<int,int> a[],int l,int r)
{
    if (l==r) return;
    int m = (l+r)/2;
    MergeSort(a,l,m);
    MergeSort(a,m+1,r);
    Merge(a,l,m,r);
}
int main()
{
    int n; cin >> n;
    pair<int,int> a[n];
    for (int i=0;i<n;++i)
    {
        int x; cin >> x;
        a[i] = {x,i};
    }
    MergeSort(a,0,n);
    cout << ans;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.09.2017, 18:00
Ответы с готовыми решениями:

В одномерном массиве найти количество пар, таких, что x[i]>x[i+1]
Здравствуйте, плохо понимаю как выполнить такую задачу((( нужно вычислить: 1) количество пар x и x, таких, что x&gt;x 2) сумму...

Подсчитать количество таких пар чисел X и Y, что (Х+У) = 80
Ребята, помогите, пожалуйста :) Сама никак не могу понять... Задание: На промежутке от -127 до 127. Подсчитать количество таких пар ...

Подсчитать количество таких пар чисел X и Y, что 50 < (Х-У) <= 80
Встречал тут такое же задание, но там написано совсем по другому. Само задание звучит так: На промежутке от -128 до 127 подсчитать...

3
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,245
05.09.2017, 18:28
Цитата Сообщение от mayo889 Посмотреть сообщение
temp[q++] = {a[i].first,a[i].second};
Думаю, это надо писать так
C++
1
2
3
temp[q].first = a[i].first;
temp[q].second=a[i].second;
q++;
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
05.09.2017, 19:03
Цитата Сообщение от mayo889 Посмотреть сообщение
Написал решение, используя Merge Sort,
а зачем тут сортировка?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main() {
   size_t N;
   std::cin >> N;
   
   int* a = new int[N];
   for(int i(0); i < N; ++i)
      std::cin >> a[i];
 
   int counter = 0;
   for(int i(0); i < N-1; ++i)
      for(int j = i + 1; j < N; ++j)
         if(a[i] > a[j])
            ++counter;
   
   std::cout << counter;
   
   delete[] a;
 
   return 0;
}
0
0 / 0 / 0
Регистрация: 05.09.2017
Сообщений: 2
05.09.2017, 19:35  [ТС]
Цитата Сообщение от mat_for_c Посмотреть сообщение
а зачем тут сортировка?
Забыл добавить, что ограничение по времени: 1 секунда.

Ваше решение работает за O(n^2) и оно получает TimeLimit11.
Я использую сортировку и программа работает за O(nlogn).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.09.2017, 19:35
Помогаю со студенческими работами здесь

Подсчитать количество таких пар чисел X и Y, что (/Х/+У) <=70
На промежутке от -128 до 127 Подсчитать количество таких пар чисел X и Y, что (/Х/+У) &lt;=70 И вывести на экран Также найти и...

Подсчитать количество таких пар чисел X и Y, что 50 x+y*x<>5000
подскажите что не так. с ассемблером не особо дружу. встречал тут похожее задание, подстроил под свой вариант.. текст задания: На...

Цикл: подсчитать количество таких пар чисел X и Y, что 50 < (Х-У) <= 80
Люди, помогите разобраться, почему не верно работает цикл. Такое задание: На промежутке от -128 до 127. Подсчитать количество таких...

Какое наибольшее количество пар (a, b) таких, что a делится на b?
Из чисел 1, 2, 3, . . . , 1799 выбран набор из 1200 попарно различных чисел. Какое наибольшее количество пар (a, b) таких, что a делится на...

Определить количество инверсий в массиве (таких пар элементов, в которых большие числа находится слева)
определить количество инверсий в массиве х (т. е таких пар элементов, в которых большые числа находится слева от меньшего)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru