Pagini recente » Cod sursa (job #1552830) | Cod sursa (job #2339637) | Cod sursa (job #111954) | Cod sursa (job #1275397) | Cod sursa (job #1732598)
#include <fstream>
#include <iostream>
using namespace std;
int n,m,a[100000],r,t;
ofstream e("cautbin.out");
ifstream f("cautbin.in");
int init()
{
f >> n;
for (int i=1; i<=n; i++)
f >> a[i];
f >> m;
}
void right(int x)
{
int w=a[x],q=x;
for (int i=x; i<=n; i++)
if (a[i+1]!=w) break; else q=i+1;
e << q << endl;
}
void zero(int x, int l, int r)
{
int m=(r+l)/2;
if ((l==r) & (a[l]!=x)) e << -1 << endl; else
if (a[r]==x) right(r); else
if (a[m]==x) right(m); else
if (a[l]==x) right(l); else
if (a[m]>x) zero(x,l,m); else zero(x,m,r);
}
void unu(int x, int l, int r)
{
int m=(l+r)/2;
if (l==r) right(l); else
if (a[m]==x) right(m); else
if (a[r]==x) right(r); else
if (a[l]==x) right(l); else
if (a[m]>x) unu(x,l,m); else unu(x,m,r);
}
void left(int x)
{
int w=a[x],q=x;
for (int i=x; i>=1; i--)
if (a[i-1]!=w) break; else q=i-1;
e << q << endl;
}
int qwerty=1;
void doi(int x, int l, int r)
{
cout << qwerty << endl;
qwerty++;
int m=(l+r)/2;
if (l==r) left(l); else
if (a[m]==x) left(m); else
if (a[r]==x) left(r); else
if (a[l]==x) left(l); else
if (a[m]>x) doi(x,m,r); else doi(x,l,m);
}
int main()
{
init();
for (int i=1; i<=m; i++)
{
f >> r >> t;
if (r==0) zero(t,1,n);
if (r==1) unu(t,1,n);
if (r==2) doi(t,1,n);
}
f.close();
e.close();
return 0;
}