728x90
반응형
초기값을 무조건 반영하면 안되는것에 주의
break 주의
#include <iostream>
#include <vector>
#include <algorithm>
#include<queue>
#include<map>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
//행복도 가장 작은거
//피로도 가장 큰거
long long mins = 1e9;
long long maxs = 0;
int n;
cin >> n;
long long a, b;
int cnt = 0;
vector<int>happymin;
vector<int>happymax;
vector<int>tiredmin;
vector<int>tiredmax;
happymin.assign(n + 1,1e9);
happymax.assign(n + 1, 0);
tiredmin.assign(n + 1, 1e9);
tiredmax.assign(n + 1, 0);
vector<int>happy; vector<int>tired;
for (int i = 0; i < n; i++) {
cin >> a >> b;
happy.push_back(a);
tired.push_back(b);
}
//누적을 만들기
for (int i = 0; i < n; i++) {
if (i == 0) {
if(happy[i]>0)happymin[i] = happy[i];
if(tired[i]>0)tiredmax[i] = tired[i];
continue;
}
//0일때??
if (happy[i] == 0)happymin[i] = happymin[i - 1];
else happymin[i] = min(happymin[i - 1], happy[i]);
if (tired[i] == 0)tiredmax[i] = tiredmax[i - 1];
else tiredmax[i] = max(tiredmax[i - 1], tired[i]);
//앞에서부터 happymin
//앞에서 부터 tiredmax
}
//뒤에서 부터 누적
for (int i = n - 1; i >= 0; i--) {
if (i == n - 1) {
if (happy[i] > 0)happymax[i] = happy[i];
if (tired[i] > 0)tiredmin[i] = tired[i];
continue;
}
if (happy[i] == 0)happymax[i] = happymax[i + 1];
else happymax[i] = max(happymax[i + 1], happy[i]);
if (tired[i] == 0)tiredmin[i] = tiredmin[i + 1];
else tiredmin[i] = min(tiredmin[i + 1], tired[i]);
}
//하나씩 채워넣기
int ans = 0;
for (int i = 0; i < n-1; i++) {
// 0
if (happymin[i] == 1e9 && happymax[i + 1] == 0) {
if (tiredmax[i] < tiredmin[i + 1] ) {
ans = i + 1;
// cout << "여기옴1";
continue;
}
else if (tiredmax[i] == 0 && tiredmin[i + 1] == 1e9) {
ans = i + 1;
// cout << "여기옴1_1";
continue;
}
}
if (happymin[i] > happymax[i + 1] && tiredmax[i] < tiredmin[i + 1]) {
ans = i + 1;//일단 여기까진 됨
//cout << "여기옴2";
}
else {
//cout << "여기옴3";
//꺠짐
// break; ??????
}
}
if (ans == 0)cout << -1;
else cout << ans;
}
728x90
반응형