比赛 |
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;
}