zoukankan      html  css  js  c++  java
  • P1484 种树

    dalao

    #include<cstdio>
    #include<iostream>
    #include<queue>
    #include<algorithm>
    using namespace std;
    struct node
    {
    	int pos;
    	long long val;
    	bool operator < (const node &b) const 
    	{
    		return val<b.val;
    	}
    };
    priority_queue<node> q;
    long long read()
    {
    	long long s=0,f=1;
    	char in=getchar();
    	while(in<'0'||in>'9')
    	{
    		if(in=='-')
    			f=-1;
    		in=getchar();
    	}
    	while(in>='0'&&in<='9')
    	{
    		s=(s<<1)+(s<<3)+in-'0';
    		in=getchar();
    	}
    	return s*f;
    }
    long long value[500100];
    long long data[500100];
    long long lef[500100];
    long long righ[500100];
    bool vis[500100];
    int main()
    {
    	long long n=read(),k=read();
    	for(int i=1;i<=n;i++)
    	{
    		data[i]=read();
    		lef[i]=i-1;
    		righ[i]=i+1;
    	}
    	lef[n+1]=n;
    	righ[0]=1;
    	node pas;
    	for(int i=1;i<=n;i++)
    	{
    		pas.pos=i;
    		pas.val=data[i];
    		q.push(pas);
    	}
    	long long ans=0;
    	while(k--)
    	{
    		while(vis[q.top().pos])
    			q.pop();
    		pas=q.top();
    		q.pop();
    		if(pas.val<0)
    			break;
    		ans+=pas.val;
    		data[pas.pos]=data[lef[pas.pos]]+data[righ[pas.pos]]-data[pas.pos];
    		pas.val=data[pas.pos];
    		vis[lef[pas.pos]]=vis[righ[pas.pos]]=true;
    		lef[pas.pos]=lef[lef[pas.pos]];
    		righ[lef[pas.pos]]=pas.pos;
    		righ[pas.pos]=righ[righ[pas.pos]];
    		lef[righ[pas.pos]]=pas.pos;
    		q.push(pas);
    	}
    	printf("%lld",ans);
    }
    
  • 相关阅读:
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
    7. Reverse Integer
    6. ZigZag Conversion
    《设计模式
    《设计模式
    《设计模式
    《linux 计划任务》- cron
    《设计模式
  • 原文地址:https://www.cnblogs.com/Lance1ot/p/8877732.html
Copyright © 2011-2022 走看看