Pagini recente » Cod sursa (job #632317) | Cod sursa (job #2586239) | Cod sursa (job #2220688) | Cod sursa (job #1518566) | Cod sursa (job #1049692)
#include<fstream>
using namespace std;
struct nod{
int inf,exp;
nod *legs,*legd;}*d,*s;
int i,n,x,mn,val,xp,k;
long long int suma;
void pop_left(nod* &s)
{
if(s==NULL) return;
nod *p=s;
if(s->legd)
{s=s->legd; s->legs=NULL;}
else s=NULL;
delete p;
}
void pop_right(nod* &d)
{
if(d==NULL) return;
nod *p=d;
if(d->legs)
{d=d->legs; d->legd=NULL;}
else d=NULL;
delete p;
}
void add_right(int x, nod* &d)
{
if(d==NULL){d=new nod; d->legs=d->legd=NULL; d->inf=x; s=d; return;}
nod* p=new nod;
p->inf=x;
p->legs=d;
d->legd=p;
p->legd=NULL;
d=p;
}
int main()
{
ifstream f("deque.in");
ofstream g("deque.out");
f>>n>>k;
s=new nod;
//s->legs=s->legd=NULL;
//d=s;
d=s=NULL;
for(i=1;i<=k;i++)
{
f>>val;
while(d!=NULL && d->inf>val)
pop_right(d);
add_right(val,d);
d->exp=i;
}
suma=s->inf;
for(i=k+1;i<=n;i++)
{
if(s->exp+k==i)
pop_left(s);
f>>val;
while(d!=NULL && d->inf>val)
pop_right(d);
add_right(val,d);
d->exp=i;
suma+=s->inf;
}
g<<suma;
f.close();
g.close();
return 0;
}