제한시간내에 돌아가는 이유가 궁금합니다.
문제에는 3초로 되있는데 제 컴퓨터에서는 교재에 있는 정답 코드도 10000을 넘어가면 3초가 넘어갑니다. 100000의 경우는 1분30초 정도 나오는것을 보면 사양의 문제는 아니라고 생각되어 질문을 합니다.
priority_queue에서 vector와 deque의 속도차이의 이유를 잘 모르겠습니다.
priority_queue> first;
priority_queue> first;
처음에는 deque로 했었는데 나중에 책과 비교해서 시간을 재보니 deque가 많이 느렸습니다. 예제의 마지막 케이스는 5배 이상 차이가.... deque는 앞뒤로 넣는것이 가능하여 더 효율적으로 동작한다고 생각했는데 시간차이가 이렇게 나는 이유가 궁금합니다.
아래는 제출했던 코드입니다.
~~~ c++
#include
#include
#include
#include
#include
#define MOD 20090711
using namespace std;
struct makeInput{
int a, b, rng;
makeInput(int _a, int _b):a(_a), b(_b), rng(1983){}
int getNext(){
int temp = rng;
rng = (rng*(long long)a+b)%MOD;
return temp;
}
};
class RUNNINGMEDIAN{
public:
void input();
void getMedi();
void Run();
private:
int count;
int n, a, b;
long long rng;
long long result;
};
void RUNNINGMEDIAN::input(){
result = 0;
cin >> n >> a >> b;
}
deque 가 vector 에 비해서 느린 건 당연합니다. priority_queue 의 내부 구현을 보면 앞뒤로 넣고 빼는 연산은 안 쓰고 뒤에만 넣고빼고를 하기 때문에 그냥 sequential한 배열인 vector 로도 충분하구요. 이쪽이 연산 오버헤드도 작고 메모리 연속성도 좋아서 캐시에 유리해서 더 빠를 것이라고 추정할 수 있습니다.
LiSA
제한시간내에 돌아가는 이유가 궁금합니다.
문제에는 3초로 되있는데 제 컴퓨터에서는 교재에 있는 정답 코드도 10000을 넘어가면 3초가 넘어갑니다. 100000의 경우는 1분30초 정도 나오는것을 보면 사양의 문제는 아니라고 생각되어 질문을 합니다.
priority_queue에서 vector와 deque의 속도차이의 이유를 잘 모르겠습니다.> first;> first;
priority_queue
priority_queue
처음에는 deque로 했었는데 나중에 책과 비교해서 시간을 재보니 deque가 많이 느렸습니다. 예제의 마지막 케이스는 5배 이상 차이가.... deque는 앞뒤로 넣는것이 가능하여 더 효율적으로 동작한다고 생각했는데 시간차이가 이렇게 나는 이유가 궁금합니다.
아래는 제출했던 코드입니다.
~~~ c++
#include
#include
#include
#include
#include
#define MOD 20090711
using namespace std;
struct makeInput{
int a, b, rng;
makeInput(int _a, int _b):a(_a), b(_b), rng(1983){}
int getNext(){
int temp = rng;
rng = (rng*(long long)a+b)%MOD;
return temp;
}
};
class RUNNINGMEDIAN{
public:
void input();
void getMedi();
void Run();
private:
int count;
int n, a, b;
long long rng;
long long result;
};
void RUNNINGMEDIAN::input(){
result = 0;
cin >> n >> a >> b;
}
void RUNNINGMEDIAN::getMedi(){> first;, greater> second;
priority_queue
priority_queue
makeInput m(a, b);
}
void RUNNINGMEDIAN::Run(){
clock_t s, e;
cin >> count;
while(count--){
input();
s = clock();
getMedi();
cout << result << endl;
e = clock();
printf("%f sec\n",(float)(e-s)/CLOCKS_PER_SEC);
}
}
int main(){
RUNNINGMEDIAN().Run();
return 0;
}
~~~
11년 전