Cod sursa(job #185943)

Utilizator gigi_becaliGigi Becali gigi_becali Data 26 aprilie 2008 14:12:38
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <cstdio>
#include <fstream.h>
#include <string>
#define maxn 500001
#define DIM 8192

int a[maxn];
int dq[maxn][2];
int first, last;
int n, K;
int poz;
char ax[DIM];


inline void cit(int &x)
{
    x=0;
    while((ax[poz]<'0' || ax[poz]>'9') && ax[poz]!='-')
        if(++poz==DIM) fread(ax, 1, DIM, stdin), poz=0;
    
    int neg=0;
    if(ax[poz]=='-') neg=1, ++poz;
    
    while(ax[poz]>='0' && ax[poz]<='9')
    {
        x=x*10+ax[poz]-'0';
        if(++poz==DIM) fread(ax, 1, DIM, stdin), poz=0;
    }
    if(neg) x=-x;
}
    
    
void read()
{
    freopen("secventa.in","r",stdin);
   // ifstream f("secventa.in");
    cit(n); cit(K);
    // f>>n>>K;
  
  for(int i=1;i<=n;++i)cit((int&)a[i]);//f>>a[i];
  
}
inline void insert(int v, int poz)
{
  while(first<=last && dq[last][0]>v) --last;
  ++last;
  dq[last][0]=v;
  dq[last][1]=poz;
}

inline short query(int a, int b)
{
  while(first<=last && dq[first][1]<a) ++first;
  return dq[first][0];
}

void solve()
{
  int i, p, q, sol=-0x3f3f3f3f;
  for(i=1;i<K;++i) insert(a[i], i);

  for(i=K;i<=n;++i)
{
      insert(a[i], i);
      int t=query(i-K+1, i);
      if(t>sol)
{
	  sol=t;
	  p=i-K+1;
	  q=i;
}
}

  ofstream g("secventa.out");
  g<<p<<" "<<q<<" "<<sol<<"\n";
 


}

int main()
{

  
  read();
 // solve();
  return 0;
}