Pagini recente » Cod sursa (job #2441618) | Cod sursa (job #1146031) | Cod sursa (job #2450847) | Cod sursa (job #155966) | Cod sursa (job #2052874)
/** S - suma subsecventei curente;
st - pozitia primului element din subsecventa curenta S;
dr - pozitia ultimului element din subsecventa curenta S;
Sm - suma subsecventei maximale (initial fiind -2000000002);
stm - pozitia primului element din subsecventa maximala Sm;
drm - pozitia ultimului element din subsecventa maximala Sm;
maxneg - cel mai mare element negativ daca exista;
p - pozitia lui maxneg;
c - numara elementele pozitive;
*/
#include <fstream>
using namespace std;
ifstream f("ssm.in"); ofstream g("ssm.out");
int n,v[6000002];
int main()
{ f>>n;
for(int i=1;i<=n;i++) f>>v[i];
int c=0,p,maxneg=-2000000000,S=0,st=1,dr,Sm=0,stm,drm;
for(dr=1;dr<=n;dr++)
{ if(v[dr]>=0) c++;
if(v[dr]<0 && v[dr]>maxneg) {maxneg=v[dr]; p=dr;}
S+=v[dr];
if(S<0) {st=dr+1; S=0;}
else
{
if(S>Sm){Sm=S; stm=st; drm=dr;} ///Criteriul maximalitatii.
}
}
if(c==0) g<<maxneg<<" "<<p<<" "<<p; else g<<Sm<<" "<<stm<<" "<<drm;
g.close(); return 0;
}