Pagini recente » Cod sursa (job #3279241) | Cod sursa (job #2692985) | Cod sursa (job #3142897) | Cod sursa (job #2998391) | Cod sursa (job #1351404)
#include <fstream>
using namespace std;
ifstream in("combinari.in");
ofstream out("combinari.out");
int n,k;
int v[19];
void combinari#include <cstdio>
#define MAX_N 100001
int N, M;
long V[MAX_N];
void read(void);
void solve(void);
int BS_0(int);
int BS_1(int);
int BS_2(int);
int main()
{
freopen("cautbin.in","rt",stdin);
freopen("cautbin.out","wt",stdout);
read();
for(int t = 0; t<M; ++t)
solve();
}
void read()
{
scanf("%d\n",&N);
for(int i = 0; i<N; ++i)
scanf("%ld",V + i);
scanf("%d",&M);
}
void solve()
{
int k, x;
scanf("%d %d",&k,&x);
if(k == 0)
printf("%d\n",BS_0(x));
if(k == 1)
printf("%d\n",BS_1(x));
if(k == 2)
printf("%d\n",BS_2(x));
}
int BS_0(int k)
{
int li = 0, lf = N;
while(li <= lf)
{
int m = li + ((lf - li) >> 1);
if(V[m] == k)
return m + 1;
if(V[m] < k)
li = m + 1;
else
lf = m - 1;
}
return -1;
}
int BS_1(int k)
{
int li = 0, lf = N - 1;
while(li <= lf)
{
int m = li + ((lf - li) >> 1);
if(V[m] <= k && ((V[m + 1] > k) || (m + 1 == N)))
return m + 1;
if(V[m] > k)
lf = m - 1;
else
li = m + 1;
}
return -1;
}
int BS_2(int k)
{
int li = 0, lf = N - 1;
while(li <= lf)
{
int m = li + ((lf - li) >> 1);
if(V[m] >= k && ((V[m - 1] < k) || (m == 0)))
return m + 1;
if(V[m] > k || ((V[m] == k) && V[m - 1] == k))
lf = m - 1;
else
li = m + 1;
}
return -1;
}(int i, int v[])
{
int j;
if(i==k)
{
for(j=1;j<=k;j++)
out<<v[j]<<' ';
out<<'\n';
}
else
{
i++;
for(j=v[i-1]+1;j<=n-k+i;j++)
{
v[i]=j;
gen(i,v);
}
}
}
int main()
{
in>>n>>k;
combinari(0,v);
in.close();
out.close();
return 0;
}