Pagini recente » Cod sursa (job #2201103) | Cod sursa (job #2141144) | Cod sursa (job #2018465) | Cod sursa (job #1441092) | Cod sursa (job #2052969)
/** 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 main()
{ int n;
f>>n;
int c=0,p,maxneg=-2000000000,S=0,st=1,dr,Sm=0,stm,drm;
for(dr=1;dr<=n;dr++)
{ int v;
f>>v;
if(v>=0) c++;
if(v<0 && v>maxneg) {maxneg=v; p=dr;}
S+=v;
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;
}