Advertisement
a53

ssplit

a53
Nov 6th, 2017
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. #include <iostream>
  2. #define Nmax 200001 /// N-ul maxim
  3. #define INF 2000000001 /// Valoarea pentru infinit
  4. using namespace std;
  5. int n,a[Nmax];
  6.  
  7. inline int MIN(int x,int y,int z)
  8. {
  9. return min(min(x,y),z);
  10. }
  11.  
  12. inline int MAX(int x,int y,int z)
  13. {
  14. return max(max(x,y),z);
  15. }
  16.  
  17. int cautbin(int I)
  18. {
  19. int j=n-1,mij,SUM1,SUM2,st=I,dr=n-1,Dif=INF;
  20. while(st<=dr)
  21. {
  22. mij=(st+dr)/2;
  23. SUM1=a[mij]-a[I-1],SUM2=a[n]-a[mij];
  24. if(SUM1<SUM2)
  25. {
  26. if(Dif>SUM2-SUM1)
  27. Dif=SUM2-SUM1,j=mij;
  28. st=mij+1;
  29. }
  30. else
  31. {
  32. if(Dif>SUM1-SUM2)
  33. Dif=SUM1-SUM2,j=mij;
  34. dr=mij-1;
  35. }
  36. }
  37. return j;
  38. }
  39.  
  40. int main()
  41. {
  42. int i,j,DifMIN,Pi,Pj,X,Y,Z,D;
  43. cin>>n;
  44. for(i=1;i<=n;++i)
  45. cin>>a[i];
  46. for(i=2;i<=n;++i) /// Calcularea sumelor partiale
  47. a[i]+=a[i-1];
  48. Pi=1;Pj=2; /// Pozitiile initiale ale lui i si j
  49. X=a[1],Y=a[2]-a[1],Z=a[n]-a[2];
  50. DifMIN=MAX(X,Y,Z)-MIN(X,Y,Z);
  51. Pi=1;Pj=2;
  52. X=a[1];Y=a[2]-a[1];Z=a[n]-a[2];
  53. DifMIN=MAX(X,Y,Z)-MIN(X,Y,Z);
  54. for(i=1;i<=n-2;++i) /// Pentru fiecare i=1,2,...,n-2 se cauta binar pozitia lui j
  55. {
  56. j=cautbin(i+1);
  57. X=a[i],Y=a[j]-a[i],Z=a[n]-a[j];
  58. D=MAX(X,Y,Z)-MIN(X,Y,Z);
  59. if(D<DifMIN)
  60. DifMIN=D,Pi=i,Pj=j;
  61. }
  62. cout<<Pi<<' '<<Pj<<'\n';
  63. return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement