两个参数:
#include <stdio.h>
#include <stdlib.h>
#define N 10000
struct node
{
int a;
int b;
int x;
}st[N];
void kp(struct node st[], int l, int r)
{
int i = l;
int j = r;
struct node k = st[l];
if(l>=r) return;
while(i<j)
{
while(i<j && st[j].a>=k.a)
{
if(st[j].a==k.a )
{
if(st[j].b>=k.b)
j--;
else
break;
}
else
j--;
}
st[i] = st[j];
while(i<j && st[i].a<=k.a)
{
if(st[i].a==k.a)
{
if(st[i].b<=k.b)
i++;
}
else
{
i++;
}
}
st[j] = st[i];
}
st[i] = k;
kp(st, i+1, r);
kp(st, l, i-1);
}
int main()
{
int m, n, t, i;
while(~scanf("%d%d%d", &m, &n, &t))
{
for(i=0; i<t; i++)
{
scanf("%d%d%d", &st[i].b, &st[i].a, &st[i].x);
}
kp(st, 0, t-1);
for(i=0; i<t; i++)
{
printf("%d %d %d\n", st[i].a, st[i].b, st[i].x);
}
}
return 0;
}
三个参数:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 500000+5
struct node
{
int u;
int v;
int w;
}map[N];
void kp(struct node map[], int l, int r)
{
int i = l, j = r;
struct node k = map[l];
if(l>=r) return ;
while(i<j)
{
while(i<j && map[j].w>=k.w)
{
if(map[j].w == k.w)
{
if(map[j].u >= k.u)
{
if(map[j].u==k.u)
{
if(map[j].v >= k.v)
{
j--;
}
else break;
}
else j--;
}
else break;
}
else j--;
}
map[i] = map[j];
while(i<j && map[i].w<=k.w)
{
if(map[i].w == k.w)
{
if(map[i].u <= k.u)
{
if(map[i].u==k.u)
{
if(map[i].v <= k.v)
{
i++;
}
else break;
}
else i++;
}
else break;
}
else i++;
}
map[j] = map[i];
}
map[i] = k;
kp(map, i+1, r);
kp(map, l, i-1);
}
int main()
{
int n, m, u, v, w, q, x, a, i;
struct node *p;
while(~scanf("%d%d", &n, &m))
{
for(i=0; i<m; i++)
{
scanf("%d%d%d", &map[i].u, &map[i].v, &map[i].w);
}
scanf("%d", &x);
kp(map, 0, m-1);
while(x--)
{
scanf("%d", &a);
printf("%d %d\n", map[a].u, map[a].v);
}
}
return 0;
}