-
Notifications
You must be signed in to change notification settings - Fork 0
/
Search.cpp
112 lines (99 loc) · 2.67 KB
/
Search.cpp
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
100
101
102
103
104
105
106
107
108
109
110
111
112
//Даны два массива целых чисел одинаковой длины A[0..n-1] и B[0..n-1].
//Необходимо найти первую пару индексов i0 и j0,
//такую что A[i0] + B[j0] = max {A[i] + B[j],
//где 0 <= i < n, 0 <= j < n, i <= j}.
//Время работы - O(n). n ≤ 100000.
#include <iostream>
#include <cassert>
class Array {
private:
int N; //количество элементов массива
int currentSize; //размер массива
int *mas; //массив
public:
Array() : N(0),currentSize(0), mas(nullptr){};
Array( int n );
Array(const Array& other) = delete;
Array(Array&& other){*this = std::move(other);};
~Array();
Array& operator=(const Array& other) = delete;
Array& operator=(Array&& other) ;
int getCurrentSize() const;
void print() const;
int getElement( int i ) const;
void putValue( int value, int place);
};
Array::Array( int n ) {
N=n;
currentSize=0;
mas = new int[N];
for(int i = 0 ; i < N ; i++ )
mas[i]=0;
}
Array::~Array() {
delete[] mas;
}
void Array::print() const{
for(int i = 0 ; i < N ; i++) {
std::cout<<mas[i]<<" ";
}
std::cout<<std::endl;
}
int Array::getElement(int element) const {
assert(element<N);
return mas[element];
}
int Array::getCurrentSize() const {
return currentSize;
}
void Array::putValue(int value,int place) {
mas[place]=0;
mas[place]=value;
currentSize++;
}
void getSum(Array& mas1, Array& mas2,int n){
int index1=0,index2=0;
int mas[n];
int max=INT32_MIN;
int ii=0;
for(int i=0;i<n;i++){
if(mas1.getElement(i)>max){
max=mas1.getElement(i);
ii=i;
}
mas[i]=ii;
}
max=INT32_MIN;
for(int i=0;i<n;i++){
if(mas1.getElement(mas[i])+mas2.getElement(i)>max){
max=mas1.getElement(mas[i])+mas2.getElement(i);
index1=mas[i];
index2=i;
}
}
std::cout<<index1<<" "<<index2<<std::endl;
}
Array& Array::operator=(Array&& arr){
*this = std::move(arr);
return *this;
}
int main(){
int n=0;
int temp=0;
std::cin>>n;
assert(n>0);
assert(n<=100000);
Array mas1(n),mas2(n);
while(mas1.getCurrentSize()<n && std::cin>>temp){
mas1.putValue(temp,mas1.getCurrentSize());
}
if(mas1.getCurrentSize()<n)
return 0;
while(mas2.getCurrentSize()<n && std::cin>>temp){
mas2.putValue(temp,mas2.getCurrentSize());
}
if(mas2.getCurrentSize()<n)
return 0;
getSum(mas1,mas2,n);
return 0;
}