题目描述
为了提高客户端开发效率和发布速度,需从客户端抽象出不同功能的组件,并且每个组件可以独立开发和发布。为实现上述功能,需要实现一个组件灰度发布服务,核心功能是
- 按用户ID范围来灰度发布组件,例如范围a{1,10}发布组件1,范围b{5,20}发布组件2,范围c{15,25}发布组件3,其中a、b、c的范围是有可能重叠,为提高查找效率和节省空间,需对所有范围进行合并和拆分,最终输出为范围A{1,4}发布组件1,B{5,10}发布组件1和2,C{11,14}发布组件2,D{15,20}发布组件2和3,E{21,25}发布组件3
输入描述:
输入有多行,每一行表示用户ID范围和对应的组件ID
输出描述:
输出有多行,每一行表示用户ID范围和对应的组件列表,范围从小到大排序,各个数字之间用空格隔开,行末无空格
示例1
输入
1 10 1
5 20 2
15 25 3
输出
1 4 1
5 10 1 2
11 14 2
15 20 2 3
21 25 3
my code
#include"iostream"
using namespace std;
#include"algorithm"
#include"vector"
typedef struct ele{
int q, w, e;
}element;
bool myless(element x, element y){return x.e < y.e ; }
inline bool diff(vector<short>& x, vector<short>& y){
if(x.size() != y.size()) return true;
else for(int i = 0, sz = x.size(); i < sz; i++)
if(x[i] != y[i]) return true;
return false;
}
inline void out(vector<short>& x){
int i = 0, sz = x.size();
for(; i < sz - 1; i++)
printf("%d ", ++x[i]);
printf("%d\n", ++x[i]);
}
int main(){
vector<element> v;
vector<unsigned> range;
int q, w, e, rgmax = 0;
for(; scanf("%d%d%d", &q, &w, &e) != EOF ; ) {
v.push_back(element{q, w, e});
rgmax = rgmax > w ? rgmax : w;
}
//sort(v.begin(), v.end(), myless);
unsigned len = v.size();
if(len == 0) return 0;
vector<vector<short>> cus(rgmax + 1);
for(int r = 0; r < len; r++)
for(int ii = v[r].q; ii <= v[r].w; ii++)
cus[ii].push_back(r);
int j = 1, bg = j;
for(; j < rgmax;){
if(diff(cus[j], cus[++j])){
printf("%d %d ", bg, j - 1);
out(cus[bg]);
bg = j;
}
}
printf("%d %d ", bg, j);
out(cus[bg]);
return 0;
}