比赛 20120418s 评测结果 AWWTTTTT
题目名称 山海经 最终得分 12
用户昵称 QhelDIV 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-04-18 11:25:59
显示代码纯文本
#include<fstream>
#include<cstdlib>
using namespace std;
ifstream fin("hill.in");
ofstream fout("hill.out");
 
int n,m,Max,Ms,Me,Re[100002];
class
{
public:
    int data,s,e;
}f[100002];
 
void init()
{
    int i;
    fin>>n>>m;
    Max=-2100000000;
     
    f[0].s=1;
     
    for(i=1;i<=n;i++)
    {
        fin>>f[i].data;
		Re[i]=Re[i-1]+f[i].data;
        if(Max<f[i].data)
        {
            Max=f[i].data;
            Ms=i;
        }
    }
     
/*    if(Max<=0)
        {
            fout<<Ms<<endl<<Ms<<endl;
            fout<<Max<<endl;
            exit (0);
        }
     */
}
 
void dp()
{
    int i;
     
    for(i=1;i<=n;i++)
        if(f[i].data+f[i-1].data>=0)
        {
                f[i].data+=f[i-1].data;
                f[i].s=f[i-1].s;
                f[i].e=i;
				if(f[i-1].data<0)
					f[i].data-=f[i-1].data,f[i].s++;
        }
        else
        {
            f[i].s=i;
            f[i].e=i;
        }
}
 
void find()
{
    int i,j,St,En;
	for(j=1;j<=m;j++)
	{
		Max=-2100000000;fin>>St>>En;
		for(i=St;i<=En;i++)
			if(Max<f[i].data)
			{
				Ms=f[i].s;
				Me=f[i].e;
				Max=f[i].data;
			}
		if(Ms<St)
		{
			Max=-10000000;
			for(i=St;i<=Me;i++)
				if(Max<Re[Me]-Re[i-1])
				{
					Max=Re[Me]-Re[i-1];
					f[Me].data=Max;
					Ms=i;
				}
		}
		fout<<Ms<<" "<<Me<<" "<<Max<<endl;
	}
}
 
int main()
{
    init();
     
    dp();
     
    find();
     
    fin.close();
    fout.close();
    return 0;
}