fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. int t;
  6. cin >> t;
  7. while(t--){
  8. int n;
  9. cin >> n;
  10. int a[n],b[n];
  11. for(int i=0;i<n;i++){
  12. cin >> a[i];
  13. }
  14. for(int i=0;i<n;i++){
  15. cin >> b[i];
  16. }
  17. stack<pair<int,int>> st;
  18. for(int i=0;i<n;i++){
  19. int right = a[i];
  20. int left = a[i] - b[i] + 1;
  21. if(st.size() == 0){
  22. st.push(make_pair(right,left));
  23. }
  24. else{
  25. int topl,topr;
  26. topl = st.top().second;
  27. topr = st.top().first;
  28. while(left <= topr && st.size() > 0){
  29. st.pop();
  30. left = min(left,topl);
  31. if(st.size() > 0){
  32. topl = st.top().second;
  33. topr = st.top().first;
  34. }
  35.  
  36. }
  37. st.push(make_pair(right,left));
  38. }
  39. }
  40. long long ans(0);
  41. while(st.size() > 0){
  42. int topl,topr;
  43. topl = st.top().second;
  44. topr = st.top().first;
  45. int len = topr - topl + 1;
  46. ans += 1LL * len * (len + 1)/2;
  47. cout << topr << " " << topl << endl;
  48. st.pop();
  49. }
  50. cout << ans << endl;
  51. }
  52. return 0;
  53. }
Success #stdin #stdout 0.01s 5408KB
stdin
1
3
1 2 3
1 1 3
stdout
3 1
6