Pagini recente » Cod sursa (job #296953) | Cod sursa (job #2015347) | Cod sursa (job #2841049) | Cod sursa (job #350003) | Cod sursa (job #1657667)
//var I 100p
#include <fstream>
#define NMax 5000003
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
int a[NMax], deque[NMax],i,k,n,p,u;
long long s;
int main()
{
f>>n>>k;
for(i=1; i<=n; i++) f>>a[i];
p=1;u=0;
for(i=1; i<=n; i++)
{
while(p<=u && a[i]<= a[deque[u]]) u--;
deque[++u]=i;
if(deque[p]==i-k) p++;
if(i>=k) s+=a[deque[p]];
}
g<<s<<'\n';
return 0;
}
////var II 100p
//#include <fstream>
//#define NMax 10000003
//using namespace std;
//ifstream f("deque.in");
//ofstream g("deque.out");
//int deque[NMax],a[NMax],i,n,x,k,p,u;
//long long s;
//int main()
//{
// f>>n>>k;
// for(i=1;i<=n;i++)f>>a[i];
// p=1;u=0;
// for(i=1;i<=n;i++){
//
// while(p<=u&&deque[u]>a[i])u--;
// u++;deque[u]=a[i];
// if(i>=k){
// s+=(long long)deque[p];
// if(deque[p]==a[i-k+1])p++;
// }
// }
// g<<s<<'\n';
// g.close();
// return 0;
//}
////var III 100p
//#include <fstream>
//#define NMax 10000003
//using namespace std;
//ifstream f("deque.in");
//ofstream g("deque.out");
//int deque[NMax],a[NMax],i,n,x,k,p,u;
//long long s;
//int main()
//{
// f>>n>>k;
// for(i=1;i<=n;i++)f>>a[i];
// p=1;u=1;deque[u]=a[1];
// for(i=2;i<=k;i++){
// while(p<=u&&deque[u]>a[i])u--;
// u++;deque[u]=a[i];
// }
// s+=(long long)deque[p];
// for(i=k+1;i<=n;i++){
// if(deque[p]==a[i-k])p++;
// while(p<=u&&deque[u]>a[i])u--;
// u++;deque[u]=a[i];
// s+=(long long)deque[p];
// }
// g<<s<<'\n';
// g.close();
// return 0;
//}
/*
#include <fstream>//deque cu struct
#include <deque>
using namespace std;
ifstream fi("deque.in");
ofstream fo("deque.out");
struct nod{
int val;
int poz;
}y;
deque < nod > dq;
int n,i,j,k,s,x;
long long mini;
int main()
{
fi>>n>>k;
for(i=1;i<=n;i++){
fi>>x;
while(!dq.empty() and dq.back().val>x)
dq.pop_back();
y.val=x;
y.poz=i;
dq.push_back(y);
if(dq.front().poz<i-k+1)
dq.pop_front();
if(i>=k) mini+=dq.front().val;
}
fo<<mini;
return 0;
}
*/
//#include <fstream> //deque cu pair
//#include <queue>
//using namespace std;
//ifstream fi("deque.in");
//ofstream fo("deque.out");
//int n, k, x;
//deque <pair <int, int> > deq;
//long long smini;
//int main()
//{
// fi>> n >> k;
// for (int i = 1; i <= n; i++) {
// fi >> x;
// while (!deq.empty() && deq.front().first <= i - k)
// deq.pop_front();
// while (!deq.empty() && deq.back().second >= x)
// deq.pop_back();
// deq.push_back(make_pair(i,x));
// if (i >= k)
// smini += deq.front().second;
// }
//
// fo<<smini;
// return 0;
//}
////rez. cu multiset(arbori de sortare) ceva greseste !?
////raspuns gresit si depasire de timp
//ar trebui sa dea 60p!!
//#include <fstream>
//#include <set>
//using namespace std;
//ifstream fi("deque.in");
//ofstream fo("deque.out");
//multiset < int > ms;
//multiset<int>::iterator it;
//int n,i,j,k,s,x,y,a[5000001];
//long long mini;
//
//int main()
//{
// fi>>n>>k;
// for(i=1;i<=n;i++)fi>>a[i];
// for(i=1;i<=n;i++){
// ms.insert(a[i]);
// if(i>=k) {
// it=ms.begin();
// mini+=*it;
// ms.erase(a[i-k+1]);
// }
// }
// fo<<mini;
// return 0;
//}