Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"bucket_id": "0c5fe950363fc0aeb7d80c5fe950363fc0aeb7d8",
"trash_time": "2026-05-16T08:28:06.801064-04:00"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#include<bits/stdc++.h>

using namespace std;

int main(int argv, char **argc) {
if (argv != 3) {
return -1;
}

string correct_output_file = argc[1];
string suspect_output_file = argc[2];

ifstream correct(correct_output_file);
ifstream suspect(suspect_output_file);

while (true) {
string correct_output;
bool correct_eol = !(correct >> correct_output);
string suspect_output;
bool suspect_eol = !(suspect >> suspect_output);
if (correct_eol != suspect_eol) {
cout << "WA";
return 0;
}
if (correct_eol) {
break;
}
if (correct_output != suspect_output) {
cout << "WA";
return 0;
}
}

cout << "OK";
return 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#include <iostream>
#include <algorithm>
#include <math.h>
#include <vector>
using namespace std;
int n,inf=1e9;
vector<long long> segment_tree,ar;
void build(int now,int begin,int end)
{
if (end==begin)
{
segment_tree[now]=end;
}
else
{
build(now*2,begin,(begin+end)/2);
build(now*2+1,(begin+end)/2+1,end);
if (ar[segment_tree[now*2]]>ar[segment_tree[now*2+1]]) segment_tree[now]=segment_tree[now*2];
else segment_tree[now]=segment_tree[now*2+1];
}
}
int maxsegment(int now,int left,int right,int begin,int end)
{
if (end<begin)
{
return -inf;
}
else if ((left==begin)&&(right==end))
{
return segment_tree[now];
}
else
{
int middle=(left+right)/2;
int x=maxsegment(now*2,left,middle,begin,min(end,middle));
int y=maxsegment(now*2+1,middle+1,right,max(begin,middle+1),end);
if ((x>=1)&&(y>=1))
{
if (ar[x]<ar[y]) return y;
else return x;
}
else if (x>=1)
{
return x;
}
else
{
return y;
}
}
}
int main()
{
int k;
cin>>n;
ar.resize(n+1);
segment_tree.resize(4*n+1);
for (int i=1;i<=n;i++)
{
cin>>ar[i];
}
build(1,1,n);
cin>>k;
for (int i=1;i<=k;i++)
{
int l,r;
cin>>l>>r;
int x=maxsegment(1,1,n,l,r);
cout<<ar[x]<<" "<<x<<"\n";
}
return 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Реализуйте структуру данных, которая на данном массиве из $N$ целых чисел позволяет узнать максимальное значение на этом массиве и индекс элемента, на котором достигается это максимальное значение.

## Входные данные
В первой строке вводится натуральное число $N$ ($1 \leq N \leq 10^5$) -- количество элементов в массиве. В следующей строке содержатся $N$ целых чисел, не превосходящих по модулю $10^9$ -- элементы массиваб гарантируется, что в массиве нет одинаковых элементов. Далее идет число $K$ ($0 \leq K \leq 10^5$) -- количество запросов к структуре данных. Каждая из следующих $K$ строк содержит два целых числа $l$ и $r$ ($1 \leq l \leq r \leq N$) -- левую и правую границы отрезка в массиве для данного запроса.

## Выходные данные
Для каждого из запросов выведите два числа: наибольшее значение среди элементов массива на отрезке от $l$ до $r$ и индекс одного из элементов массива, принадлежащий отрезку от $l$ до $r$, на котором достигается этот максимум.
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"id": "0c5fe950363fc0aeb7d80c5fe950363fc0aeb7d8",
"title": "RMQ",
"type": "write_code",
"level": 1,
"statement": "statement.md",
"tl": 1000,
"ml": 256,
"tests": [
{
"id": 1,
"input": "tests/01",
"output": "tests/01.out",
"visible": true
},
{
"id": 2,
"input": "tests/02",
"output": "tests/02.out",
"visible": false
},
{
"id": 3,
"input": "tests/03",
"output": "tests/03.out",
"visible": false
}
],
"checker": {
"path": "checker.cpp",
"lang": "C++"
},
"solution": {
"path": "solution.cpp",
"lang": "C++"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
5
7 3 1 6 4
3
1 5
2 4
3 3
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
7 1
6 4
1 3
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
1
0
1
1 1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0 1
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
2
0 1
3
1 1
1 2
2 2
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
0 1
1 2
1 2
Loading