fork download
  1. #include <bits/stdc++.h>
  2. #define pii pair<int,int>
  3. #define mp make_pair
  4. using namespace std;
  5.  
  6. const int maxn=2e6+5;
  7. int n,w,len,L,R,now;
  8. int que[maxn],a[maxn],val[maxn];
  9. vector<pii> Event[maxn];
  10. long long ans;
  11.  
  12. void update(int l,int r){
  13. while(L<=R&&que[L]<l) L++;
  14. for(int i=now+1;i<=r;i++){
  15. while(L<=R&&a[que[R]]<a[i]) R--;
  16. que[++R]=i;
  17. }now=r;
  18. }
  19. bool check(int len,int j){
  20. return w-len+1>j||len<j;
  21. }
  22.  
  23. int main(){
  24. scanf("%d%d",&n,&w);
  25. for(int i=1;i<=n;i++){
  26. scanf("%d",&len);
  27. now=0;
  28. for(int j=1;j<=len;j++) scanf("%d",&a[j]);
  29. L=1,R=0;int j=1,ret=0;
  30. for(j=1;j<=len;j++){
  31. update(max(1,len-w+j),min(j,len));
  32. ret=(check(len,j)?max(0,a[que[L]]):a[que[L]]);
  33. Event[j].push_back(mp(i,ret));
  34. }
  35. for(j=max(j,w-len+1);j<=w;j++){
  36. update(max(1,len-w+j),min(j,len));
  37. ret=(check(len,j)?max(0,a[que[L]]):a[que[L]]);
  38. Event[j].push_back(mp(i,ret));
  39. }
  40. }
  41. for(int j=1;j<=w;j++){
  42. for(int i=0;i<Event[j].size();i++){
  43. pii p=Event[j][i];
  44. ans-=val[p.first];ans+=p.second;
  45. val[p.first]=p.second;
  46. }printf("%lld ",ans);
  47. }
  48. }
  49.  
Success #stdin #stdout 0.02s 51684KB
stdin
Standard input is empty
stdout
Standard output is empty