64,637
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <vector>
using namespace std;
class ip
{
public:
int m;
ip() :id(3){}
void save(); //一边插入一边排序
long long int search(long long int V); //找V所在ID
private:
int T, n;
vector<vector<long long int> > id;
long long int dich(int left, int right,long long int V); //二分法定位
};
void ip::save()
{
cin >> T >> n;
long long int a, b, Id;
int j;
for (int i = 0; i < n; ++i)
{
cin >> a >> b >> Id;
id[0].push_back(a);
id[1].push_back(b);
id[2].push_back(Id);
for (j = i; j >0 && id[0][j-1]>a; --j)
{
id[0][j] = id[0][j - 1];
id[1][j] = id[1][j - 1];
id[2][j] = id[2][j - 1];
}
id[0][j] = a;
id[1][j] = b;
id[2][j] = Id;
}
cin >> m;
}
long long int ip::search(long long int V)
{
if (long long int x=dich(0, n-1,V)) return x;
else return -1;
}
long long int ip::dich(int left, int right,long long int V)
{
if (V<id[0][left] || V > id[1][right])
return -1;
int mid;
mid = (left + right) / 2;
if (V >= id[0][mid] && V <= id[1][mid])
return id[2][mid];
else if (V < id[0][mid])
return dich(left, mid, V);
else
return dich(mid + 1, right, V);
}
int main()
{
ip ip_s;
long long int v;
ip_s.save();
for (int i = ip_s.m; i > 0; --i)
{
cin >> v;
cout << ip_s.search(v) << endl;
}
return 0;
}
#include <iostream>
#include <map>
#include <utility>
using namespace std;
typedef long long int lli;
struct st
{
lli x, y;
st() :x(0), y(0){}
st(lli a, lli b) :x(a), y(b){}
friend bool operator < (const struct st &ls, const struct st &rs);
};
inline bool operator < (const struct st &ls, const struct st &rs)
{
return (ls.x < rs.x && ls.y < rs.y);
}
lli search(lli x, const map<st, lli> &id)
{
st tmp = st(x, x);
auto it = id.find(tmp);
if (it == id.end())
return -1;
else
return it->second;
}
int main()
{
int T;
unsigned int n,m;
st key;
lli ID, V;
map<st, lli> id;
cin >> T;
for (; T > 0; --T)
{
cin >> n;
for (unsigned int i=n; i>0; --i)
{
cin >> key.x >> key.y >> ID;
id.insert(pair<st, lli>(key, ID));
}
cin >> m;
for (; m > 0; --m)
{
cin >> V;
if (n == 0)
cout << "-1" << endl;
else
cout << search(V, id) << endl;
}
}
return 0;
}