记录编号 160134 评测结果 AWWWWWWW
题目名称 山海经 最终得分 12
用户昵称 Gravatarwolf. 是否通过 未通过
代码语言 C++ 运行时间 2.268 s
提交时间 2015-04-24 08:08:42 内存使用 0.31 MiB
显示代码纯文本
#include<iostream>
#include<fstream>
#include<bitset>
#include<vector>
#include<deque>
#include<map>
#include<set>
#include<queue>
#include<string>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cstdio>
using namespace std;
#if defined wolf
const string ok="OK";
const string kk="	";
ofstream nnew("hill.in",ios::app);
ifstream fin("hill.in");
#define fout cout
#define Endl endl
#else
ifstream fin("hill.in");
ofstream fout("hill.out");
#endif
class llink{
public:
	int x,y,n;
	llink(){
		x=-1;
		y=-1;
	}
	llink(int a,int b,int c){
		x=a;
		y=b;
		n=c;
	}
	llink plus(const llink a,const llink b){
		if(a.x==-1&&a.y==-1){
			return b;
		}
		if(b.x==-1&&b.y==-1){
			return a;
		}
		llink it(a.x,b.y,a.n+b.n);
		return it;
	}
	llink cmp(const llink a,const llink b){
		if(a.x==-1&&a.y==-1){
			return b;
		}
		if(b.x==-1&&b.y==-1){
			return a;
		}
		if(a.n<b.n){
			return b;
		}else{
			return a;
		}
		return llink();
	}
};

class node{
public:
	int l,r;
	llink sum,amx,lmx,rmx;
	node(){
		l=-1;
		r=-1;
	}
	node(int a,int b){
		l=a;
		r=b;
	}
	node(int a,int b,llink c,llink d,llink e,llink f){
		l=a;
		r=b;
		sum=c;
		amx=d;
		lmx=e;
		rmx=f;
	}
	node operator + (const node& p){
		if(l==-1&&r==-1){
			return p;
		}
		if(p.l==-1&&p.r==-1){
			return *this; 
		}
		node it(l,p.r);
		it.sum=llink().plus(sum,p.sum);
		it.amx=llink().cmp(amx,p.amx);
		if(rmx.x!=-1||p.lmx.x!=-1){
			it.amx=llink().cmp(it.amx,llink().plus(rmx,p.lmx));
		}
		it.lmx=llink().cmp(lmx,llink().plus(sum,p.lmx));
		it.rmx=llink().cmp(p.rmx,llink().plus(p.sum,rmx));
		return it;
	}
};
vector<int> num;//原始数据
vector<node> TT;
void build(int p,int l,int r){
	TT[p].l=l;
	TT[p].r=r;
	if(l==r){
		if(num[l]<0){
			TT[p].lmx=llink(0,0,0);
			TT[p].rmx=llink(0,0,0);
		}else if(num[l]==0){
			TT[p].lmx=llink(0,0,0);
			TT[p].rmx=llink(l,l,num[l]);
		}else{
			TT[p].lmx=llink(l,l,num[l]);
			TT[p].rmx=llink(l,l,num[l]);
		}
		TT[p].amx=llink(l,l,num[l]);
		TT[p].sum=llink(l,l,num[l]);
		//cout<<p<<kk<<TT[p].lmx.n<<kk<<TT[p].rmx.n<<kk<<TT[p].amx.n<<endl;
		return;
	}
	int mid=(l+r)/2;
	build(2*p,l,mid);
	build(2*p+1,mid+1,r);
	TT[p]=TT[p*2]+TT[p*2+1];
	//cout<<p<<kk<<TT[p].lmx.n<<kk<<TT[p].rmx.n<<kk<<TT[p].amx.n<<endl;
}
node find(int p,int a,int b){
	//cout<<p<<"  "<<a<<"  "<<b<<endl;
	if(TT[p].l==a&&TT[p].r==b){
		return TT[p];
	}
	int mid=(TT[p].l+TT[p].r)/2;
	if(b<=mid){
		return find(2*p,a,b);
	}else if(a>mid){
		return find(2*p+1,a,b);
	}else{
		return find(2*p,a,mid)+find(2*p+1,mid+1,b);
	}
}
int main(){
	double n,m;
	fin>>n>>m;
	TT.resize((int)(n*(log(n)/log(2.0))));
	for(int i=0;i!=(int)n;++i){
		int e;
		fin>>e;
		num.push_back(e);
	}
	build(1,0,num.size()-1);
	for(int i=0;i!=m;++i){
		int a,b;
		fin>>a>>b;
		node it;
		it=find(1,a-1,b-1);
		fout<<it.amx.x+1<<"  "<<it.amx.y+1<<"  "<<it.amx.n<<endl;
	}
	//-------------------------*/
	#if defined wolf
	cout<<endl<<(double)clock()/CLOCKS_PER_SEC<<'s'<<endl;
	#endif
	return 0;
}
//Designed by wolf
//Thu Apr 23 2015