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

Количество максимумов на отрезке

18.06.2020, 13:05. Показов 9008. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Условие:
Реализуйте структуру данных для эффективного вычисления значения максимального из нескольких подряд идущих элементов массива, а также количества элементов, равных максимальному на данном отрезке.

Формат входных данных:
В первой строке вводится одно натуральное число N (1 <= N <= 100000) — количество чисел в массиве.
Во второй строке вводятся N целых чисел от 1 до 100000 — элементы массива.
В третьей строке вводится одно натуральное число K (1 <= K <= 30000) — количество запросов на вычисление максимума.
В следующих K строках вводится по два числа — номера левого и правого элементов отрезка массива (считается, что элементы массива нумеруются с единицы).

Формат выходных данных:
Для каждого запроса выведите в отдельной строке через пробел значение максимального элемента на указанном отрезке массива и количество максимальных элементов на этом отрезке.

входные данные:
5
2 2 2 1 5
2
2 3
2 5

выходные данные:
2 2
5 1
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.06.2020, 13:05
Ответы с готовыми решениями:

Найти в каждом заданном массиве количество максимумов, и вывести на экран тот массив, в котором больше максимумов
Помогите пожалуйста) Даны массивы А(10), В(10), С(10). Надо найти в каждом массиве количество максимумов и вывести на экран тот массив в...

Количество максимумов и минимумов в массиве
Всем привет, помогите доделать программу, я нашёл Максимум и Минимум,а как найти их количество!? #include &lt;iostream&gt; using...

Найти количество максимумов в последовательности
Напишите программу, которая запрашивает число n, а далее последовательность из n чисел, и находит количество максимумов в ней. Попробуйте...

1
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
18.06.2020, 15:07
Лучший ответ Сообщение было отмечено иВаН0301 как решение

Решение

Наберите в гугле : дерево отрезков и читайте.
Вот решение, тесты проходит.
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <algorithm>
#include <vector>
 
using namespace std;
 
struct segment_tree {
 
    vector<pair<int,int>>tree;
    int m = 1;
 
    segment_tree(int n){
        
        while(m < n)m *= 2;
        tree.resize(2*m-1);
    }
    
    void update(int i,int val,int v,int lx,int rx){
        
        if(rx - lx  == 1){
            tree[v] = make_pair(val,1);
            return;
        }
        
        int mid = (lx+rx)/2;
        
        if(i < mid)update(i,val,v*2+1,lx,mid);
        else update(i,val,v*2+2,mid,rx);
        
        if(tree[v*2+1].first > tree[v*2+2].first){
            tree[v] = tree[v*2+1];  
        }
        if(tree[v*2+1].first < tree[v*2+2].first){
            tree[v] = tree[v*2+2];
        }
        if(tree[v*2+1].first == tree[v*2+2].first){
            tree[v].first = tree[v*2+1].first;
            tree[v].second = tree[v*2+1].second + tree[v*2+2].second;
        }
        
    }
    
    void update(int i,int val){
        update(i,val,0,0,m);
    }
    
    
    pair<int,int> op(int l,int r,int v,int lx,int rx){
        
        if(l >= rx || lx >= r)return make_pair(-1,0);
        if(lx >= l && rx <= r)return tree[v];
        
        int mid = (lx+rx)/2;
        
        auto first = op(l,r,v*2+1,lx,mid);
        auto second = op(l,r,v*2+2,mid,rx);
        
        if(first.first > second.first)return first;
        else if(first.first < second.first)return second;
        else return make_pair(first.first,first.second + second.second);
        
    }
    
    pair<int,int> op(int l,int r){
        return op(l,r,0,0,m);
    }
    
    
    
};
 
int main() 
{
    int n,q,x;
    cin >> n;
    
    segment_tree t(n);
    
    for(int i = 0;i<n;++i){
        cin >> x;
        t.update(i,x);
    }
    
    cin >> q;
    
    for(int i = 0;i<q;++i){
        
        int l,r;
        cin >> l >> r;
        
        auto ans = t.op(l-1,r);
        cout << ans.first << ' ' << ans.second << "\n";
        
    }
    
    
    
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.06.2020, 15:07
Помогаю со студенческими работами здесь

Определить количество строгих локальных максимумов в последовательности
Элемент последовательности называется локальным максимумом, если он строго больше предыдущего и последующего элемента последовательности....

Рекурсия. Найти количество максимумов в последовательности, не используя цикл
Доброго времени суток, дорогие господа программисты. Мне нужно решить одну задачу. Сразу скажу, что я не ленивая задница, скорее тупая,...

Найти общее количество локальных максимумов в строках заданной матрицы
Добрый вечер, пользователи данного форума! Мне дали задание, но я никак не могу его сделать, не знаю с чего начать. Прошу вашей помощи ) ...

Найдите количество абсолютных и локальных минимумов и максимумов среди элементов одномерного массива
Найдите количество абсолютных и локальных минимумов и максимумов среди элементов одномерного массива.

Количество максимумов
Дано несколько чисел. Определить среди них количество максимумов с использованием функций car и cdr.


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru