Advertisement
a53

sum_max_min

a53
Jan 9th, 2022
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.93 KB | None | 0 0
  1. #include <stack>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <cmath>
  5. #define Mod 1000000007
  6. #define Nmax 1000001
  7. using namespace std;
  8. int n,t;
  9. int V[Nmax],F[Nmax],D[Nmax];
  10. long long sum;
  11.  
  12. int main()
  13. {
  14. ios::sync_with_stdio(false);
  15. cin.tie(0);
  16. cout.tie(0);
  17. int x;
  18. cin>>n>>t;
  19. D[0]=1;
  20. for(int i=1;i<Nmax;++i)
  21. D[i]=(1LL*D[i-1]*2)%Mod;
  22. for(int i=1;i<=n;++i)
  23. cin>>x,++F[x];
  24. int k=0;
  25. for(int i=0;i<Nmax;++i)
  26. while(F[i])
  27. V[++k]=i,--F[i];
  28. int dr=1;
  29. for(int i=1;i<=n;++i)
  30. {
  31. while(V[i]-V[dr]>t)
  32. ++dr;
  33. sum=(sum+1ll*D[i-dr]*V[i])%Mod;
  34. }
  35. dr=1;
  36. for(int i=1;i<=n;++i)
  37. {
  38. if(dr<i)
  39. dr=i;
  40. while(V[dr+1]-V[i]<=t&&dr<n)
  41. ++dr;
  42. sum=sum-(1LL*D[dr-i]*V[i])%Mod;
  43. while(sum<0)
  44. sum=Mod+sum;
  45. }
  46. cout<<sum;
  47. return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement