fork(1) download
  1. #include<stdio.h>
  2. #include<string.h>
  3. #define rep(i,n) for(i=0;i<n;i++)
  4. int main()
  5. {
  6. int n;scanf("%d",&n);
  7. long int arr[n],i,dp[n],sign[n],sum=0,sum2=0;
  8. memset(dp,0,sizeof(dp[0])*n);
  9. memset(sign,0,sizeof(sign[0])*n);
  10. rep(i,n)
  11. {
  12. scanf("%d",&arr[i]);
  13. if(arr[i]>0)
  14. sum+=arr[i];
  15. else
  16. sum2++; // this is just to count the number of negative numbs//
  17. sign[i]=sum2;
  18. dp[i]=sum;
  19. }
  20. long int m,x,y,j,ans;
  21. scanf("%d",&m);
  22. rep(i,m)
  23. {
  24. scanf("%d %d",&x,&y);
  25. if(x==y)
  26. printf("%d\n",arr[x-1]);
  27. else
  28. {
  29. if(arr[x-1]>0)
  30. ans=dp[y-1]-dp[x-1]+arr[x-1];
  31. else
  32. {
  33. if(arr[y-1]>0)
  34. ans=dp[y-1]-dp[x-1];
  35. else
  36. {
  37. if((y-x)==(sign[y-1]-sign[x-1]))//to check if there is any positive num b/w x & y// //
  38. {
  39. ans=-99999;
  40. for(j=x-1;j<y;j++)
  41. if(arr[j]>ans)
  42. ans=arr[j];
  43. }
  44. else
  45. ans=dp[y-1]-dp[x-1];
  46. }
  47. }
  48. printf("%d\n",ans);
  49. }
  50. }
  51. return 0;
  52. }
  53.  
Success #stdin #stdout 0s 2252KB
stdin
3 
-1 2 3
1
1 2
stdout
2