역대급으로 어이없는 문제.....
https://www.acmicpc.net/problem/11003
11003번: 최솟값 찾기
N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다.
www.acmicpc.net
priority_queue와 fastio의 조합이라는
말도안되는 정답을 요구한다
printf / scanf -> TLE
cout / cin with fastio -> AC
????????
맞춰놓긴 했는데
왜이런진 아직도 모르겠다.
인덱스를 저장해두고 최솟값을 꺼낼때
인덱스 범위를 충족하는지 확인해주면 되는 문제였다.
아마 이런거 보면 이게 꼼수쯤 되는 풀이인거 같긴 한데....
아몰랑 맞왜틀 엄청 한 문제였다.
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
priority_queue<pii, vector<pii>, greater<pii>> pq;
int main(){
int n,l,k;
scanf("%d %d", &n, &l);
for(int i=0; i<n; i++){
scanf("%d", &k);
pq.push({k,i});
while(i-l+1>=0 && pq.top().second < i-l+1){ pq.pop(); }
printf("%d ", pq.top().first);
}
return 0;
}
TLE 소스
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
priority_queue<pii, vector<pii>, greater<pii>> pq;
int main(){
ios_base::sync_with_stdio(false);
cout.tie(NULL);
cin.tie(NULL);
int n,l,k;
cin >> n >> l;
for(int i=0; i<n; i++){
cin >> k;
pq.push({k,i});
int tmp = i-l+1;
while(tmp>=0 && pq.top().second < tmp){ pq.pop(); }
cout << pq.top().first << ' ';
}
return 0;
}
AC 소스
반응형