cf 教育场4 ,区间交集个数
来源:互联网 发布:羊毛毡淘宝哪家好 编辑:程序博客网 时间:2024/05/18 01:01
题目大意:给你那个区间,问哪些区间断的重叠区间的个数大于等于k,输出最小区间数(要合并)
思路:将左右端点分开(不在一个结构体里)保存在一个数组,加标记确定左端点还是右端点,排序,遇到左端点ans++,右端点ans--,大于等于k则记录…………
最后区间合并时出现了问题,想了好久,慌了……最后有一点,排序时必须按双重关键字排序!!让左端点小于右端点,这样可以解决点区间bug。。。
比赛结束后十分钟过得…………pity
#include <cstdio>#include <string>#include <cstring>#include <fstream>#include <algorithm>#include <cmath>#include <queue>#include <stack>#include <vector>#include <map>#include <set>#include <iomanip>#include <iostream>using namespace std;#define maxn 2000005#define MOD 1000000007#define mem(a) memset(a , 0 , sizeof(a))#define LL __int64LL n , k;struct node{ int val; int flag; /*friend bool cmp(node a , node b) { return a.val < b.val; }*/ friend bool operator <(node a , node b) { if(a.val == b.val) return a.flag < b.flag; return a.val < b.val; }}arr[maxn];struct pointe{ int left; int right; int flag;}res[maxn] ;int main(){ while(scanf("%I64d %I64d" , &n , &k) != EOF ) { int tmp; int num = 2 * n; for(int i = 0 ; i < num ; i ++) { scanf("%d" , &tmp); if(i % 2) arr[i].flag = 1; else arr[i].flag = 0; arr[i].val = tmp; } sort(arr , arr + num ); int ans = 0; int pos = 1; int left = 0; for(int i = 0 ; i < num ; i ++) { if(arr[i].flag) ans--; else ans++; if(ans >= k && !left) { res[pos].left = arr[i].val; left = 1; } else if(ans < k && left) { left = 0; res[pos].flag = 0; res[pos++].right = arr[i].val; } } int pos2 = pos; for(int i = 1 ; i < pos - 1 ; i ++) { if(res[i].right == res[i+1].left) res[i].flag = 1 , pos -- ; } printf("%d\n" , pos - 1); res[0].flag = 0; for(int i = 1 ; i < pos2 ; i ++) { //cout << res[i].flag<<endl; if(!res[i].flag && !res[i-1].flag ) printf("%d %d\n" , res[i].left , res[i].right); else if(!res[i].flag && res[i-1].flag) { printf("%d\n" , res[i].right); } else if(res[i].flag && res[i-1].flag ) continue; else if(res[i].flag && !res[i-1].flag ) printf("%d " , res[i].left); } } return 0;}
0 0
- cf 教育场4 ,区间交集个数
- 区间求交集算法
- ZCMU-1772-区间交集
- Java统计无交集区间的最多个数(运用:如一天之内预约最多的客户)
- CF拉练第一场
- 第一场cf
- 没有交集的区间求解
- 判断两个区间有无交集
- HDU 6069-Counting Divisors(多校训练第四场->区间质因数个数)
- 最近两场cf总结
- hdu1006 Tick and Tick 区间交集
- 如何确定两个区间是否有交集?
- CF 271F,区间gcd
- CF 149D 区间dp
- hdu5288 区间个数
- 重叠区间的个数
- 重叠区间个数
- 重叠区间的个数
- 8天学通MongoDB——第七天 运维技术
- android-Distributing to Specific Screens
- ImageView xml错误
- hdu 1248 寒冰王座
- 简易打折,输入数量金额然后计算打折
- cf 教育场4 ,区间交集个数
- xUtils3框架
- Android逆向工程101 – Part 2
- [看书日记20151226]MeasureSpec和LayoutParams的对应关系 , View的工作流程
- 用递归计算阶乘!
- 8路监控音频怎么接
- 点子汇聚
- 8天学通MongoDB——第八天 驱动实践
- 小猪的数据结构辅助教程——2.7 线性表中的双向循环链表