Cod sursa(job #2546923)

Utilizator marius004scarlat marius marius004 Data 14 februarie 2020 18:47:45
Problema Secventa Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <string>
#include <deque>
 
std::ifstream f("secventa.in");
std::ofstream g("secventa.out");
 
const int NMAX = 500005;
int n,k,v[NMAX],sol,I,J,maxx = -(1 << 30),index;
std::deque<int>d;
std::string s;

int getDistance(int x,int y){
	return y - x + 1;
}

int nr(){
	
	while(s[index] == ' ')
		index++;
	
	int x = 0;
	while(s[index] >= '0' && s[index] <= '9')
		x = x * 10 + (s[index++] - '0');
	
	return x;
}
 
int main(){
 
    f >> n >> k;
    f.get();
 
    std::getline(f,s);
    
    // din fiecare secventa de lungime k iau minimul si il compar cu maximul curent
    //numarul obtinut este valoarea maxima a bazei.mai trebuie sa iau indexul minim
    for(int i = 1;i <= n;++i){
 
 	   v[i] = nr();
 	   
        while(!d.empty() && v[i] <= v[d.back()])
            d.pop_back();
 
        d.push_back(i);
 
        if(i - d.front() + 1 > k)
            d.pop_front();
 
        if(i >= k && v[d.front()] > maxx){
            maxx = v[d.front()];
            J = i;
            I =  i - k + 1;
        }
    }
    
    g << I << ' ' << J << ' ' << maxx;
 
    return 0;
}