最初想法
把所有计算出来O(n)
排序O(nlogn)//TLE
求和O(n)
瞅一眼数据发现能拿50
排序TLE 对排序进行优化
发现只要求m个有序的
用优先队列
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
long long a[10000009];
priority_queue <long long> que;
long long n,m,x,y,nw,sum;
int main() {
freopen("shop.in","r",stdin);
freopen("shop.out","w",stdout);
long long i;
scanf("%lld%lld%lld%lld",&n,&m,&x,&y);
a[1]=x;
x=x%1000000000;
for(i=2;i<=n;i++) {
a[i]=y*a[i-1]%1000000000+x;
a[i]=a[i]%1000000000;
if(que.size()<m)
que.push(a[i]);
else {
nw=que.top();
if(nw>a[i]){
que.pop();
que.push(a[i]);
}
}
}
for(i=1;i<=m;i++)
sum+=a[i];
cout<<sum;
fclose(stdin);
fclose(stdout);
return 0;
}