fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const long long N = 1e6 + 9;
  5. long long n , l , r , mx;
  6. long long pr[N] ;
  7.  
  8. void sub1() {
  9.  
  10. mx = 0;
  11.  
  12. for (long long i = 1 ; i <= n ; i ++)
  13. for (long long j = 1 ; j < i ; j ++) if (pr[i] - pr[j - 1] == 0)
  14. mx = max(mx , i - j + 1);
  15.  
  16. cout << mx;
  17. }
  18.  
  19. unordered_map <long long,long long> mp;
  20.  
  21. void sub2() {
  22. mx = 0;
  23.  
  24. for (long long i = 1 ; i <= n ; i ++)
  25. mx = max(mx , i - mp[pr[i]]);
  26.  
  27. cout << mx;
  28. }
  29.  
  30. int main() {
  31. cin.tie(0)->sync_with_stdio(0);
  32.  
  33. #ifndef ONLINE_JUDGE
  34. freopen("ZERO.inp" , "r" , stdin);
  35. freopen("ZERO.out" , "w" , stdout);
  36. #endif
  37. cin >> n ;
  38.  
  39. pr[0] = 0;
  40. for (long long i = 1 ; i <= n ; i++ ) {
  41. long long x;
  42. cin >> x;
  43. pr[i] = pr[i-1] + x;
  44. if (mp[pr[i]] == 0) mp[pr[i]] = i;
  45. }
  46.  
  47. if (n <= 3000)
  48. {
  49. sub1();
  50. return 0;
  51. }
  52.  
  53. sub2();
  54. }
Success #stdin #stdout 0.01s 5392KB
stdin
5
2 1 -2 3 -2
stdout
4