141832025-01-10 08:27:10RRoliInverziócpp17Hibás válasz 3/50199ms6380 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
	int n;
	cin >> n;
	vector<int> v(n), ind(n+1), ext(n);
	for(int i = 0; i < n; i++) {
		cin >> v[i];
		ind[v[i]] = i+1;
	}

	int ln = v[0], lk = v[n-1], l = 0, r = n-1;
	bool valt = true;
	while(l < r) {
		if(ln > lk) {
			int b = ind[ln], j = ind[lk];
			while(ext[b-1] > lk) b--;
			while(ext[j+1] < ln) j++;
			cout << b << ' ' << j;
			break;
		}
		if(v[l+1] > lk) {
			l++;
			ln = max(ln, v[l]);
		} else if(v[r-1] < ln) {
			r--;
			lk = min(lk, v[r]);
		} else if(v[l+1] > ln) {
			l++;
			ln = max(ln, v[l]);
		} else if(v[r-1] < lk) {
			r--;
			lk = min(lk, v[r]);
		} else if(v[l+1] > v[l]) {
			l++;
			ln = max(ln, v[l]);
		} else if(v[r-1] < v[r]) {
			r--;
			lk = min(lk, v[r]);
		} else if(valt) {
			l++;
			ln = max(ln, v[l]);
			valt = !valt;
		} else {
			r--;
			lk = min(lk, v[r]);
			valt = !valt;
		}
		ext[l] = ln;
		ext[r] = lk;
	}
	if(l >= r) cout << -1;

	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base3/50
1Elfogadva0/01ms316 KiB
2Hibás válasz0/017ms820 KiB
3Elfogadva1/11ms316 KiB
4Hibás válasz0/21ms316 KiB
5Hibás válasz0/71ms320 KiB
6Hibás válasz0/217ms1000 KiB
7Hibás válasz0/2187ms6292 KiB
8Hibás válasz0/2194ms6292 KiB
9Hibás válasz0/2199ms6288 KiB
10Hibás válasz0/2194ms6196 KiB
11Hibás válasz0/2196ms6196 KiB
12Hibás válasz0/2194ms5944 KiB
13Hibás válasz0/2194ms6196 KiB
14Hibás válasz0/2190ms6288 KiB
15Hibás válasz0/2192ms6292 KiB
16Hibás válasz0/2195ms6196 KiB
17Hibás válasz0/2192ms6288 KiB
18Hibás válasz0/2193ms6196 KiB
19Hibás válasz0/3187ms6200 KiB
20Hibás válasz0/3189ms6196 KiB
21Hibás válasz0/2188ms6380 KiB
22Hibás válasz0/2194ms6284 KiB
23Hibás válasz0/2196ms6208 KiB
24Elfogadva2/2185ms6200 KiB