Cod sursa(job #1058477)

Utilizator romykPrehari Romica romyk Data 15 decembrie 2013 16:30:34
Problema Deque Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <stdio.h>
#include <malloc.h>
using namespace std;
struct node{
    int info;
    struct node *next;
}*first,*p;

int a[5000000];

void add(int inf)
{
   node *n=(node *)malloc(sizeof(node));
        n->info=inf;
        p=first;
        if(first->info>inf){
            n->next=first;
            first=n;
        }
        else{
            while(p->next!=NULL&&p->next->info<inf)p=p->next;
            n->next=p->next;
            p->next=n;
       }


}
void del(int info)
{

   node *n;
       p=first;
       if(first->info==info){
             first=first->next;
             delete p;
       }
       else{
            while(p->next!=NULL&&p->next->info!=info)p=p->next;
            if(p->next!=NULL)
            {n=p->next;
            p->next=p->next->next;}
            delete n;
       }

}
int main()
{
    int i,n,k,j,ll;

    long long s=0;
   freopen("deque.in","r",stdin);
   freopen("deque.out","w",stdout);
   scanf("%i %i",&n,&k);
    for(i=0;i<n;i++)
    scanf("%i",&a[i]);
    node *ss=(node *)malloc(sizeof(node));
    ss->info=a[0];
    ss->next=NULL;
first=ss;
first->next=NULL;
for(i=1;i<k;i++)
    add(a[i]);
   s+=first->info;
for(i=k;i<n;i++)
{
    add(a[i]);
    del(a[i-k]);
    s+=first->info;
}
printf("%lli",s);

    return 0;
}