fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <algorithm>
  5. #include <map>
  6. #include <set>
  7. #include <queue>
  8. #include <stack>
  9. #include <cmath>
  10. #include <iomanip>
  11. #include <numeric>
  12. using namespace std;
  13.  
  14. void solve()
  15. {
  16. string s;
  17. cin >> s;
  18.  
  19. stack<int> stk;
  20. stk.push(-1);
  21.  
  22. int longest = 0, sublong = 0, subs = 0, ln = s.size();
  23.  
  24. bool sub1 = 1;
  25. for (int i = 0; i < ln; i++)
  26. {
  27. if (s[i] == '(')
  28. {
  29. stk.push(i);
  30. }
  31. else if (!stk.empty() && ((s[i] == ')' && s[stk.top()] == '(')))
  32. {
  33. stk.pop();
  34.  
  35. if (!sub1 && (i - stk.top()) == longest)
  36. ++subs;
  37.  
  38. if ((i - stk.top()) > longest)
  39. subs = 1;
  40. longest = max(longest, i - stk.top());
  41. }
  42. else
  43. {
  44. sub1 = 0;
  45. while (!stk.empty())
  46. {
  47. stk.pop();
  48. }
  49. stk.push(i);
  50. }
  51. }
  52.  
  53. if (subs > 0)
  54. cout << longest << " " << subs;
  55. else
  56. cout << "0 1";
  57. }
  58.  
  59. int main()
  60. {
  61. ios_base::sync_with_stdio(false);
  62. cin.tie(nullptr);
  63. cout.tie(nullptr);
  64.  
  65. // freopen("in.txt", "rt", stdin);
  66. // freopen("out.txt", "wt", stdout);
  67.  
  68. int t = 1;
  69. // cin >> t;
  70.  
  71. while (t--)
  72. {
  73. solve();
  74. }
  75.  
  76. return 0;
  77. }
Success #stdin #stdout 0.01s 5288KB
stdin
stdout
0 1