堆【洛谷P1801 && 洛谷P1631 && 洛谷P2085】

扔下代码就逃~

第一题:

#include 
using namespace std;
const int maxn = 2e5+7;
int a[maxn];
int main()
{
	priority_queue qmax;
	priority_queue,greater > qmin;
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	int r = 1;
	int q;
	for(int i=1;i<=m;i++)
	{
		cin>>q;
		for(int j=r;j<=q;j++)
		{
			qmax.push(a[j]);
			if(qmax.size()==i)
			{
				qmin.push(qmax.top());
				qmax.pop();
			}
		}
		r = q+1;
		cout<

第二题:

#include 
using namespace std;
typedef pair P;
const int maxn = 1e5+7;
int a[maxn],b[maxn];
int nxt[maxn];
int main()
{
	int n;
	cin>>n;
	priority_queue,vector >,greater > > q;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=n;i++)
	{
		cin>>b[i];
		nxt[i] = 1;
		q.push(P(a[1]+b[i],i));
	}
	int p = 0;
	for(int i=0;i

第三题:

#include 
using namespace std;
typedef long long ll;
typedef pair P;
const int maxn = 1e5+7;
int a[maxn],b[maxn],c[maxn],x[maxn];
ll f(int i)
{
	return a[i]*x[i]*x[i]+b[i]*x[i]+c[i];
}
int main()
{
	int n,m;
	cin>>n>>m;
	priority_queue,greater

> q; for(int i=1;i<=n;i++) { cin>>a[i]>>b[i]>>c[i]; x[i] = 1; q.push(P(f(i),i)); } int tmp = 0; for(int i=0;i

 

你可能感兴趣的:(堆【洛谷P1801 && 洛谷P1631 && 洛谷P2085】)