Pagini recente » Cod sursa (job #2410283) | Borderou de evaluare (job #3199821) | Cod sursa (job #575534) | Cod sursa (job #1108326) | Cod sursa (job #2911411)
#include <fstream>
#include <vector>
#include <set>
#include <deque>
using namespace std;
ifstream cin("secventa.in");
ofstream cout("secventa.out");
int main1() /// O(Nlog(K))
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, k;
cin >> n >> k;
vector<int> a(n);
for(int i = 0; i < n; i++)
cin >> a[i];
multiset<int> cnt;
for(int i = 0; i < k; i++)
cnt.insert(a[i]);
int mini = *cnt.begin(), l = 0;
for(int i = k; i < n; i++)
{
cnt.erase(cnt.find(a[i - k]));
cnt.insert(a[i]);
if(*cnt.begin() > mini)
{
mini = *cnt.begin();
l = i - k + 1;
}
}
cout << l + 1 << ' ' << l + k << ' ' << mini << '\n';
return 0;
}
int main() /// O(N) - deque
{
int n, k;
cin >> n >> k;
vector<int> a(n);
for(int i = 0; i < n; i++)
cin >> a[i];
deque<int> deq;
for(int i = 0; i < k; i++)
{
while(!deq.empty() && a[deq.back()] >= a[i])
deq.pop_back();
deq.push_back(i);
}
int maxi = deq.front(), r = k - 1;
for(int i = k; i < n; i++)
{
while(!deq.empty() && deq.front() <= i - k)
deq.pop_front();
while(!deq.empty() && a[deq.back()] >= a[i])
deq.pop_back();
deq.push_back(i);
if(a[maxi] < a[deq.front()])
{
maxi = deq.front();
r = i;
}
}
cout << r - k + 2 << ' ' << r + 1 << ' ' << a[maxi] << '\n';
return 0;
}