#include <set>
#include <vector>usingnamespace std;
intconst size =30000;
set<int> s;
int put[size], get[size];
main()
{
int T, n, m;
int i, j, k, t;
scanf("%d", &T);
while (T --)
{
scanf("%d%d", &n, &m);
for (i =0; i < n; i ++)
{
scanf("%d", &put[i]);
}
for (i =0; i < m; i ++)
{
scanf("%d", &get[i]);
}
i =0;
k =0;
set<int>::iterator it = s.begin();
while (1)
{
for (t =0; i <get[k]; t ++)
{
s.insert(put[i ++]);
}
it ++;
printf("%d\n", *(it));
k ++;
if(i == n)
break;
}
}
}
我认为出错可能的原因在这里 set <int>::iterator it = s.begin();
while (1) { for (t = 0; i < get[k]; t ++) { s.insert(put[i ++]); }
set<int>::iterator it ;
while (1)
{
for (t =0; i <get[k]; t ++)
{
s.insert(put[i ++]);
}
it=s.begin();
it ++;
printf("%d\n", *(it));
k ++;
if(i == n)
break;
}
#include <set>
#include <vector>usingnamespace std;
intconst size =30000;
set<int> s;
int put[size], get[size];
main()
{
int T, n, m;
int i, j, k, t;
scanf("%d", &T);
while (T --)
{
scanf("%d%d", &n, &m);
for (i =0; i < n; i ++)
{
scanf("%d", &put[i]);
}
for (i =0; i < m; i ++)
{
scanf("%d", &get[i]);
}
i =0;
k =0;
set<int>::iterator it = s.begin();
while (1)
{
while(i <get[k])
{
s.insert(put[i ++]);
}
it ++;
printf("%d\n", *(it));
k ++;
if(i == n)
break;
}
}
}
程序运行可以理解如下: 0)初始集合 S为空,有一个非空有穷集合 Z = {Z0, Z1, ..., Zn-1}, Zi ( i 为 0 .. n-1)为有穷自然数集合 1) for i = 0 ... n-1 将Zi元素插入S中,插入后,S中的元素为递增序列 输出 S的第i个元素。 i++;
#include <set>
#include <vector>usingnamespace std;
intconst size =30000;
set<int> s;
int put[size], get[size];
void main()
{
int T, n, m;
int i, j, k, t;
scanf("%d", &T);
while (T --)
{
scanf("%d%d", &n, &m);
for (i =0; i < n; i ++)
{
scanf("%d", &put[i]);
}
for (i =0; i < m; i ++)
{
scanf("%d", &get[i]);
}
i =0;
k =0;
while (1)
{
while(i <get[k] && i<n)
{
s.insert(put[i ++]);
}
k ++;
if(i == n || k==m)
break;
}
}
set<int>::iterator it = s.begin();
for(;it!=s.end();it++)
printf("%d\n", *(it));
}
222121222121212
请按任意键继续. . .