Pagini recente » Cod sursa (job #2226600) | Cod sursa (job #3215132) | Cod sursa (job #266188) | Cod sursa (job #980595) | Cod sursa (job #2913577)
#include <fstream>
using namespace std;
ifstream cin ("sequencequery.in");
ofstream cout ("sequencequery.out");
int v[100001],n,q;
int die(int l,int r)
{
if(l==r) return v[l];
long long sumL=0,bestL=-2e9;
for(int i=(l+r)/2;i>=l;--i)
bestL=max(bestL,sumL+=v[i]);
long long sumR=0,bestR=-2e9;
for(int i=(l+r)/2+1;i<=r;++i)
bestR=max(bestR,sumR+=v[i]);
long long r1=die(l,(l+r)/2);
long long r2=die((l+r)/2+1,r);
if(bestL+bestR>r1 && bestL+bestR>r2) return bestL+bestR;
else
{
if(r1>r2) return r1;
return r2;
}
}
int main()
{
cin>>n>>q;
for(int i=1; i<=n; i++) cin>>v[i];
while(q--)
{
int p1,p2;
cin>>p1>>p2;
cout<<die(p1,p2)<<'\n';
}
}