Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 22.10.2023
Сообщений: 26

Алгоритмы,ООП

30.11.2023, 23:44. Показов 577. Ответов 5

Студворк — интернет-сервис помощи студентам
На вход поступает n строк, на каждой из которой записаны 3 величины: x,y(координаты) и w(вес) какого-то объекта.
Нужно научиться обрабатывать 2 вида запросов:
1) 1 i val
Присвоение i-ому объекту веса val
2)2 rx ry
посчитать сумму весов объектов у которых x <=rx и y <=ry.
Формат ввода:
1 строка) число n
На следующих n строках данные объектов
Далее n +1 строке:
q(кол-во запросов)
Далее на q строках описание запросов
Ограничения 1 запроса:
i (1 ≤ i ≤ n) и val (0 ≤ val < 10**9)
Второго запроса:
0 ≤ rx, ry <=10**9
1<=n,q<=10**5
Моя попытка
Python
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
from dataclasses import dataclass
n=int(input())
@dataclass
class Node:
    min_x=10**9
    max_x=10**9
    min_y=10**9
    max_y=10**9
    w=0
tree=[Node() for _ in range(n*4)]
def build(v,tl,tr):
    if tl==tr:
        tree[v]=Node(mas[tl][0],mas[tl][0],mas[tl][1],mas[tl][1],mas[tl][2])
    else:
        tm=(tl+tr)//2
        build(v*2,tl,tm)
        build(v*2+1,tm+1,tr)
        tree[v].min_x=min(tree[v*2].min_x,tree[v*2+1].min_x)
        tree[v].max_x=max(tree[v*2].max_x,tree[v*2+1].max_x)
        tree[v].min_y=min(tree[v*2].min_y,tree[v*2+1].min_y)
        tree[v].max_y=max(tree[v*2].max_y,tree[v*2+1].max_y)
        tree[v].w=tree[v*2].w+tree[v*2+1].w
def update(v,tl,tr,i,x):
    if i==tl==tr:
        tree[v].w=x
    elif tr<i or tl>i:
        return 
    else:
        tm=(tl+tr)//2
        update(v*2,tl,tm,i,x)
        update(v*2+1,tm+1,tr,i,x)
        tree[v].w=tree[v*2].w+tree[v*2+1].w
def rq(v,rx,ry):
    if tree[v].max_x<=rx and tree[v].max_y<=ry:
        return tree[v]
    elif tree[v].min_x>rx or tree[v].min_y>ry:
        return 0
    else:
        return rq(v*2,rx,ry) +rq(v*2+1,rx,ry)
mas=[list(map(int,input().split())) for i in range(n)]
q=int(input())
build(1,0,n-1)
for j in range(q):
    a,b,c=map(int,input().split())
    if a==1:
        update(1,0,n-1,b,c)
    else:
        print(rq(1,b,c))
Ошибка:
Traceback (most recent call last):
File "main.py", line 42, in <module>
build(1,0,n-1)
File "main.py", line 16, in build
build(v*2,tl,tm)
File "main.py", line 16, in build
build(v*2,tl,tm)
File "main.py", line 13, in build
tree[v]=Node(mas[tl][0],mas[tl][0],mas[tl][1],mas[tl][1],mas[tl][2])
Не могу понять почему возникает

Добавлено через 1 час 12 минут
Нашел ошибку глупую и ещё пару ляпов, в итоге работает, но медленно, помогите ускорить пожалуйста:
Python
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
from dataclasses import dataclass
n=int(input())
@dataclass
class Node:
    min_x:int
    max_x:int
    min_y:int
    max_y:int
    w:int
tree=[Node(10**9,10**9,10**9,10**9,0) for _ in range(n*4)]
def build(v,tl,tr):
    if tl==tr:
        tree[v]=Node(mas[tl][0],mas[tl][0],mas[tl][1],mas[tl][1],mas[tl][2])
    else:
        tm=(tl+tr)//2
        build(v*2,tl,tm)
        build(v*2+1,tm+1,tr)
        tree[v].min_x=min(tree[v*2].min_x,tree[v*2+1].min_x)
        tree[v].max_x=max(tree[v*2].max_x,tree[v*2+1].max_x)
        tree[v].min_y=min(tree[v*2].min_y,tree[v*2+1].min_y)
        tree[v].max_y=max(tree[v*2].max_y,tree[v*2+1].max_y)
        tree[v].w=tree[v*2].w+tree[v*2+1].w
def update(v,tl,tr,i,x):
    if i==tl==tr:
        tree[v].w=x
    elif tr<i or tl>i:
        return 
    else:
        tm=(tl+tr)//2
        update(v*2,tl,tm,i,x)
        update(v*2+1,tm+1,tr,i,x)
        tree[v].w=tree[v*2].w+tree[v*2+1].w
def rq(v,rx,ry):
    if tree[v].max_x<=rx and tree[v].max_y<=ry:
        return tree[v].w
    elif tree[v].min_x>rx or tree[v].min_y>ry:
        return 0
    else:
        return rq(v*2,rx,ry) +rq(v*2+1,rx,ry)
mas=[list(map(int,input().split())) for i in range(n)]
build(1,0,n-1)
q=int(input())
for j in range(q):
    a,b,c=map(int,input().split())
    if a==1:
        update(1,0,n-1,b-1,c)
    else:
        print(rq(1,b,c))
Пример входных данных:
3
1 1 10
2 3 100
3 2 1000
4
2 2 3
1 2 200
2 3 3
2 3 2
Вывод
110
1210
1010
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.11.2023, 23:44
Ответы с готовыми решениями:

Рекурсивные алгоритмы
Добрый день)задача на рекурсию Дана последовательность натуральных чисел(вводится с клавиатуры отдельное число на новой строке)...

Линейные алгоритмы

Задача ООП
Помогите пожалуйста! Нужно решить задачу - причем сроки поджимают - не могу понять что и как (( вот ссылка на задание...

5
0 / 0 / 0
Регистрация: 22.10.2023
Сообщений: 26
01.12.2023, 12:20  [ТС]
По идее это должно работать за n+q*log(n)
Но питон при n,q до 10**5 по идее должен справлять за 3 секунду с такими вычислениями, не понимаю что затормаживает...
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
01.12.2023, 14:26
gordei1, принципиально реализовать нужно именно сверху?
1
0 / 0 / 0
Регистрация: 22.10.2023
Сообщений: 26
01.12.2023, 18:56  [ТС]
eaa, не совсем вас понял
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
01.12.2023, 19:07
Цитата Сообщение от gordei1 Посмотреть сообщение
не совсем вас понял
зато я все понял)
0
0 / 0 / 0
Регистрация: 22.10.2023
Сообщений: 26
01.12.2023, 23:10  [ТС]
eaa, ?
Изначально я подумал что тормозить может заполнение это громоздкое нодами в массиве и переписал , но походу проблема в другом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2023, 23:10
Помогаю со студенческими работами здесь

Задача по ООП
Замените атрибуты Time на одно целое число, представляющее секунды, прошедшие с полуночи. Затем измените методы (и функцию int_to_time())...

Алгоритмы решения задач
Нужно сделать второй вариант метода Адамса(второго порядка), табл,1(3), таблица решений - t, x(t), x`(t), графики функций - x(t), x`(t)....

Алгоритмы решения задач
Формирование симметрической положительно определенной матрицы c выводом графика.

Задачка по питону на алгоритмы
Всем привет, есть вот такая задача входной файл: 4 1111 9999 1111 9911 k = int(input())

Алгоритмы обработки массивов
В массиве четное число элементов. Напишите программу, которая меняет местами пары соседних элементов: A с A, A с A и т.д.


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru