fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. typedef long long ll;
  5. const int maxN = 2e5 + 5;
  6. const int INF = 1e9;
  7.  
  8. int n;
  9. ll pre[maxN], S;
  10.  
  11. struct Seg{
  12. ll st[4*maxN];
  13.  
  14. void update(int id, int l, int r, int pos, ll val){
  15. if (l > pos || r < pos)
  16. return;
  17. if (l == r){
  18. st[id] = val;
  19. return;
  20. }
  21. int mid = (l + r)/2;
  22. update(id*2, l, mid, pos, val);
  23. update(id*2 + 1, mid+1, r, pos, val);
  24. st[id] = min(st[id*2], st[id*2 + 1]);
  25. }
  26.  
  27. void update(int pos, ll val){
  28. update(1, 1, n, pos, val);
  29. }
  30.  
  31. int walk(int id, int l, int r, int u, int v, ll k){
  32. if (st[id] > k || l > v || r < u)
  33. return INF;
  34. if (l == r)
  35. return l;
  36. int mid = (l + r)/2;
  37. int tam = walk(id*2 + 1, mid+1, r, u, v, k);
  38. if (tam == INF){
  39. tam = walk(id*2, l, mid, u, v, k);
  40. }
  41. return tam;
  42. }
  43.  
  44. int walk(int u, int v, ll k){
  45. return walk(1, 1, n, u, v, k);
  46. }
  47. } seg;
  48.  
  49. int main(){
  50. ios_base::sync_with_stdio(0);
  51. cin.tie(0);
  52. /*if (fopen(".inp", "r")){
  53.   freopen(".inp", "r", stdin);
  54.   freopen(".out", "w", stdout);
  55.   }*/
  56. cin >> n >> S;
  57. for (int i = 1; i <= n; ++i){
  58. ll x; cin >> x;
  59. pre[i] = pre[i - 1] + x;
  60. seg.update(i, pre[i]);
  61. }
  62. int ans = -1;
  63. for (int l = 0; l < n; ++l){
  64. int tam = seg.walk(l+1, n, S + pre[l]);
  65. if (tam != INF){
  66. ans = max(ans, tam - l);
  67. }
  68. }
  69. cout << ans;
  70.  
  71. return 0;
  72. }
Success #stdin #stdout 0.01s 5308KB
stdin
Standard input is empty
stdout
-1