use priority_queue <unsigned int>!!!!
Послано
Dan.hu 3 фев 2007 13:07
Re: use priority_queue <unsigned int>!!!!
With 1 Mb memory limit? :-)
Re: use priority_queue <unsigned int>!!!!
AC now:)
Edited by author 11.02.2007 15:03
Re: use priority_queue <unsigned int>!!!!
You should store in queue n/2 +1 numbers
Re: use priority_queue <unsigned int>!!!!
I can't understand you... How I can do it?
Re: use priority_queue <unsigned int>!!!!
At first push n/2+1 numbers then do this
1 read next number
2 push it to queue
3 pop biggest element
4 goto 1
At the end use 2 or 1 top elements for answer
Re: use priority_queue <unsigned int>!!!!
Thank you very much!!! I got AC!
Re: use priority_queue <unsigned int>!!!!
I use priority queue as you said,but still MLE#7.Maybe I'm wrong,here is my code:
#include<iostream>
using namespace std;
#include<queue>
int main()
{std::priority_queue<int>pr;
int n,i,a;
cin>>n;
for(i=1;i<=n/2+1;i++)
{cin>>a;
pr.push(a);
}
i=n/2+2;
while(i<=n){
cin>>a;
pr.push(a);i++;
pr.pop();
}
if(n%2!=0)
cout<<pr.top()<<".0"<<endl;
else
{a=pr.top();
pr.pop();
if(a%2+pr.top()%2==2)
cout<<a/2+pr.top()/2+1<<".0"<<endl;
else
if(a%2+pr.top()%2==0)
cout<<a/2+pr.top()/2<<".0"<<endl;
else
if(a%2+pr.top()%2==1)
cout<<(a/2+pr.top()/2)<<".5"<<endl;
}
return 0;
}
Thank!!!
Edited by author 18.09.2007 19:59
try *_heap (+)
Послано
ASK 28 фев 2010 18:29
int v[250000/2+3];
for(; i < n/2+1; ++i) cin >> v[i];
make_heap(v,v+n/2+1);
for(; i < n; ++i){
cin >> v[n/2+1];
push_heap(v,v+n/2+2);
pop_heap(v,v+n/2+2);
}
BTW(1), there is no need for "unsigned" since input is less than 2^31-1
BTW(2), there is no need to avoid "double a" in calculation and output of the the final answer:
cout << setprecision(1) << fixed << a << endl;
Re: try *_heap (+)
BTW(1), there is no need for "unsigned" since input is less than 2^31-1
There was an example of possible input in early posts on the forum:
[(2^31 - 1) + (2^31 - 1)] / 2 = 2^31 - 1
but
((2^31) - 1) + ((2^31) - 1) = 4 294 967 294
so if you don't know how to manage such a thing you should use unsigned int.
BTW there is no differences in allocated memory between "unsigned" and "signed int" but "unsigned" work faster.
Re: try *_heap (+)
one way to avoid overflow of calculating ((2^31) - 1) + ((2^31) - 1) is to compute
((2^31-1) * 0.5) + ((2^31-1) * 0.5) instead of ( ((2^31) - 1) + ((2^31) - 1) ) * 0.5
Re: use priority_queue <unsigned int>!!!!
thank you very much!
Re: use priority_queue <unsigned int>!!!!
I have learnt a lot ,thanks.
Re: use priority_queue <unsigned int>!!!!
I use G++ 4.9 and get MLE. Then I try G++ 4.9 C++ 11 and AC.
Why? :(