Advertisement
double_trouble

sort

Jul 16th, 2014
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.74 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4.  
  5. void qqsort(long lv, long pr, long long c[1000][3]);
  6. void qsort(long l, long r, long long m[2000][3]);
  7.  
  8. int main()
  9. {
  10.     freopen("input.txt", "r", stdin);
  11.     freopen("output.txt", "w", stdout);
  12.     long long n,m,kol,max,s;
  13.     long long k[1000][3],l[1000][3],ans[1000][3];
  14.     cin>>n>>m;
  15.     for (int i=0; i<n ; i++)
  16.         for (int j=0; j<3; j++)
  17.             cin>>k[i][j];
  18.     kol=-1;
  19.     for (int i=0; i<m; i++)
  20.         for (int j=0; j<3; j++)
  21.         {
  22.             cin>>l[i][j];
  23.             if(j==2 && l[i][j]>=1)
  24.             {
  25.                 kol++;
  26.                 ans[kol][0]=l[i][0];
  27.                 ans[kol][1]=l[i][1];
  28.                 ans[kol][2]=l[i][2];
  29.             }
  30.         }
  31.     s=-1;
  32.      max=k[0][1];
  33.      for  (int i=0; i<n; i++)
  34.      {
  35.          if (k[i][1]>=1)
  36.             s++;
  37.         if (k[i][1]>max)
  38.             max=k[i][1];
  39.      }
  40.     qqsort(0,n-1,k);
  41.     for (int i=0; i<n; i++)
  42.         if (k[i][1]>=1 && (k[i][1]==max || k[i][1]>k[s/2][1]))
  43.     {
  44.         kol++;
  45.         ans[kol][0]=k[i][0];
  46.         ans[kol][1]=k[i][1];
  47.         ans[kol][2]=k[i][2];
  48.     }
  49.     qsort(0,kol,ans);
  50.     /*for (int i=0; i<kol+1; i++)
  51.     {
  52.         for (int j=0; j<3; j++)
  53.             cout<<ans[i][j]<<" ";
  54.         cout<<endl;
  55.     }*/
  56.     cout<<kol+1<<endl;
  57.     for (int i=0; i<kol+1; i++)
  58.         cout<<ans[i][0]<<" ";
  59.     return 0;
  60. }
  61.  
  62. void qqsort(long lv, long pr, long long c[1000][3])
  63. {
  64.     long i=lv;
  65.     long j=pr;
  66.     long d=pr/2;
  67.     long x=c[d][1];
  68.     long y=c[d][2];
  69.     long z=0;
  70.     do
  71.     {
  72.         while (c[i][1]>d ||(c[i][1]==x && c[i][2]>y))
  73.             i++;
  74.         while (c[j][1]<d ||(c[j][1]==x && c[j][2]<y))
  75.             j--;
  76.         if (i<=j)
  77.         {
  78.           z=c[i][0];
  79.           c[i][0]=c[j][0];
  80.           c[j][0]=z;
  81.           z=c[i][1];
  82.           c[i][1]=c[j][1];
  83.           c[j][1]=z;
  84.           z=c[i][2];
  85.           c[i][2]=c[j][2];
  86.           c[j][2]=z;
  87.           i++;
  88.           j--;
  89.         }
  90.     }
  91.     while (i<=j);
  92.     if (lv<j)
  93.         qqsort(lv,j,c);
  94.     if (pr>i)
  95.         qqsort(i,pr,c);
  96. }
  97.  
  98.  
  99. void qsort (long l, long r, long long m[2000][3])
  100. {
  101.     long i=l;
  102.     long j=r;
  103.     long d=m[(l+r)/2][0];
  104.     long x=0;
  105.     do
  106.     {
  107.         while (m[i][0]<d)
  108.             i++;
  109.         while (m[j][0]>d)
  110.             j--;
  111.         if (i<=j)
  112.         {
  113.           x=m[i][0];
  114.           m[i][0]=m[j][0];
  115.           m[j][0]=x;
  116.           x=m[i][1];
  117.           m[i][1]=m[j][1];
  118.           m[j][1]=x;
  119.           x=m[i][2];
  120.           m[i][2]=m[j][2];
  121.           m[j][2]=x;
  122.           i++;
  123.           j--;
  124.         }
  125.     }
  126.     while (i<=j);
  127.     if (l<j)
  128.         qsort(l,j,m);
  129.     if (r>i)
  130.         qsort(i,r,m);
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement