Cod sursa(job #2358362)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 28 februarie 2019 01:51:04
Problema Secventa Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream>
using namespace std;
ifstream fin ("secventa.in");
ofstream fout ("secventa.out");
int a[500005], dq[500005];
int main()
{
    int n, k, F = 1, L = 0, mn = 30005, mx = 0, pos = 0, pos2 = 0;
    fin >> n >> k;
    int x = 1, y = k;
    for(int i = 1; i <= n; ++i) fin >> a[i];
    for(int i = 1; i <= k; ++i) {
        dq[++L] = a[i];
        if(mn >= a[i]) mn = a[i], pos = i;
    }
    mx = mn;
    for(int i = pos + 1; i <= n; ++i) {
            if(a[i] > mx) {
                int F = i, L = i - 1, mx1 = 30005, cnt = 0;
                while(a[i] > mx) {
                    if(mx1 >= a[i]) pos2 = i, mx1 = a[i];
                    ++cnt;
                    if(cnt <= k) dq[++L] = a[i];
                        else {
                            if(a[i] <= mx1) mx1 = a[i], dq[++L] = mx1, ++F, pos2 = i;
                            else if(dq[F] == mx1) {
                                ++F;
                                dq[++L] = a[i];
                                mn = 30005;
                                for(int j = F; j <= L && mn != dq[F - 1]; ++j)
                                        if(mn >= a[i]) mn = dq[j], pos = j;
                                mx1 = mn;
                            }
                            else ++F, dq[++L] = a[i];
                            if(mx1 > mx) mx = mx1, x = F, y = L;
                        }
                        ++i;
                }
                if(cnt >= k) i = pos2 - 1;
            }
    }
    fout << x << " " << y << " " << mx;
    return 0;

}