Cod sursa(job #2358368)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 28 februarie 2019 02:20:08
Problema Secventa Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("secventa.in");
ofstream fout ("secventa.out");
int a[500005], dq[500005], n, k, sz1;
char s[3000005];
void lirefrancais()
{
    fin >> n >> k;
    fin.get();
    fin.getline(s, 3000005);
    int sz = strlen(s);
    char semn = '+';
    for(int i = 0; i < sz; i++) {
        if(s[i] == '-' || s[i] == '+') semn = s[i];
        else if(s[i] >= '0' && s[i] <= '9') {
            int nr = 0;
            while(s[i] >= '0' && s[i] <= '9') nr = nr * 10 + (s[i] - '0'), ++i;
            if(semn == '+') a[++sz1] = nr;
            else a[++sz1] = -nr, semn = '+';
        }
    }
}
int main()
{
    int F = 1, L = 0, mn = 30005, mx = 0;
    lirefrancais();
    int x = 1, y = k;
    for(int i = 1; i <= k; ++i) {
        dq[++L] = a[i];
        mn = min(mn, a[i]);
    }
    mx = mn;
    for(int i = k + 1; i <= n; ++i) {
        if(dq[F] == mn && a[i] <= mn) mn = a[i], dq[++L] = mn, ++F;
        else if(dq[F] == mn) {
            ++F;
            dq[++L] = a[i];
            mn = 30005;
            for(int j = F; j <= L && mn != dq[F - 1]; ++j)
                    mn = min(mn, dq[j]);
        }
        else ++F, dq[++L] = a[i];
        if(mn > mx) mx = mn, x = F, y = L;
    }
    fout << x << " " << y << " " << mx;
    return 0;

}