1301 - Monitoring Processes
Time Limit: 3 second(s) | Memory Limit: 32 MB |
We have planned to design a new operating system. Like other OS we will use the techniques of processes, schedulers, locks etc. The basic plan is to use the OS in hardwires that have low configurations. So, efficiency matters. That's why we want to minimize the cost as well as the power consumption. To be more specific, there are n processes, and each process starts its execution in timestamp si, and ends its execution in timestamp ti. For simplicity assume that the timestamps are represented as integers. Now when a process is being executed, we need a wrapper program to look after the process. The reason behind using wrapper programs is that, they will continuously check the processes and if any process tries to harm the system or wants to take hold of some restricted resources or even tries to invoke some forbidden methods, the wrapper will halt the process and generate appropriate error signals. But the problem is that a wrapper program cannot monitor more than one process in any timestamp and when it's been assigned to a process, it will have to wait until the process finishes. But after this, the same wrapper program can be used for monitoring another process. So, a wrapper program can be used for multiple processes but not more than one in any timestamp.
So, we have the process schedules and we want to find the number of wrapper programs to monitor them according to the given restrictions. As you are the leading programmer of this project, you are asked to find the minimum number of wrapper programs to monitor all the processes.
Input
Input starts with an integer T (≤ 20), denoting the number of test cases.
Each case starts with a line containing an integer n (1 ≤ n ≤ 50000). Each of the next n lines contains two integers si ti (1 ≤ si ≤ ti ≤ 109).
Output
For each case, print the case number and the minimum number of wrapper programs to monitor all the processes.
Sample Input |
Output for Sample Input |
2 2 1 3 3 5 4 1 10 10 20 11 21 3 5 |
Case 1: 2 Case 2: 2 |
Note
Dataset is huge, use faster I/O methods.
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<stdlib.h>
6 #include<queue>
7 #include<set>
8 using namespace std;
9 typedef long long LL;
10 typedef struct pp
11 {
12 int x;
13 int y;
14 int id;
15 } ss;int maxx;
16 ss ans[50005];
17 int ak[200000];
18 int tree[200000*4];
19 void in(int n,int m,int l,int r,int k)
20 {
21 if(l>m||r<n)
22 {
23 return ;
24 }
25 else if(l<=n&&r>=m)
26 {
27 tree[k]+=1;
28 return ;
29 }
30 else
31 {
32 in(n,(n+m)/2,l,r,2*k+1);
33 in((n+m)/2+1,m,l,r,2*k+2);
34 }
35 }
36 void fang(int n,int m,int k)
37 {
38 if(n==m)
39 { if(tree[k]>maxx)
40 maxx=tree[k];
41 return ;
42 }
43 else
44 {
45 tree[2*k+1]+=tree[k];
46 tree[2*k+2]+=tree[k];
47 fang(n,(n+m)/2,2*k+1);
48 fang((n+m)/2+1,m,2*k+2);
49 }
50 }
51 int main(void)
52 {
53 int i,j,k;
54 scanf("%d",&k);
55 int s;
56 int n,m;
57 for(s=1; s<=k; s++)
58 { maxx=0;
59 scanf("%d",&n);
60 int vv=0;
61 for(i=0; i<n; i++)
62 {
63 scanf("%d %d",&ans[i].x,&ans[i].y);
64 ak[vv++]=ans[i].x;
65 ak[vv++]=ans[i].y;
66 }
67 sort(ak,ak+vv);
68 for(i=0; i<n; i++)
69 {
70 int l=0;
71 int r=vv-1;
72 int id=0;
73 while(l<=r)
74 {
75 int mid=(l+r)/2;
76 if(ak[mid]<=ans[i].x)
77 {
78 id=mid;
79 l=mid+1;
80 }
81 else r=mid-1;
82 }
83 ans[i].x=id;
84 l=0;
85 r=vv-1;
86 while(l<=r)
87 {
88 int mid=(l+r)/2;
89 if(ak[mid]<=ans[i].y)
90 {
91 id=mid;
92 l=mid+1;
93 }
94 else r=mid-1;
95 }
96 ans[i].y=id;
97 }
98 memset(tree,0,sizeof(tree));
99 for(i=0; i<n; i++)
100 {
101 in(0,200000,ans[i].x,ans[i].y,0);
102
103 }
104 fang(0,200000,0);
105 printf("Case %d: %d\n",s,maxx);
106 }
107 return 0;
108 }
1301 - Monitoring Processes的更多相关文章
- Monitoring Processes with Supervisord
If you're interested in more of this type of content, check out the Servers for Hackers eBook! As so ...
- 通过inotify监控linux文件系统变化
http://www.mjmwired.net/kernel/Documentation/filesystems/inotify.txt http://www.ibm.com/developerwor ...
- The Best KPIs to Use in Your Company
Here is a list of key performance indicators (KPIs) that should be used in contact centres, alongsid ...
- Apache CloudStack Features
As a mature and turnkey Infrastructure-as-a-Service (IaaS) platform, Apache CloudStack has a compreh ...
- Zabbix二次开发_03api列表
基于zabbix 3.0 https://www.zabbix.com/documentation/3.0/manual/api/reference Method reference This sec ...
- mysql的AB及读写和集群
Mysql的AB及读写 第1章 Mysql的AB配置 1.1 master配置 1.2 slave配置 第2章 读写分离 2.1 安装mycat 2.2 启动mycat 2.3 登录mycat相关问 ...
- 基于MySQL+MHA+Haproxy部署高可用负载均衡集群
一.MHA 概述 MHA(Master High Availability)是可以在MySQL上使用的一套高可用方案.所编写的语言为Perl 从名字上我们可以看到.MHA的目的就是为了维护Master ...
- Arch系统软件列表
1. 安装统计 2. 安装列表 3. 安装说明 4. 作为依赖项的安装列表 5. 更正 mangaro使用减的方式安装系统.开箱即用的豪华版本,大部分人需要的都有了,同样包括个别用户不需要的,配置方面 ...
- 【线上测试之后的应用】基于MySQL+MHA+Haproxy构建高可用负载均衡数据库集群(详解)
这里我们先介绍一下MHA是什么,其次就是它的应用与测试,同时为了大家呈现了数据备份案例,最后总结了使用情况以及注意事项和解决办法 一.MHA 概述 MHA(Master High Availabili ...
随机推荐
- Docker网络设置及文件挂载
网络设置–net=bridge- 默认选项,用网桥的方式来连接docker容器.–net=host- docker跳过配置容器的独立网络栈.–net=container:NAME_or_ID- 告诉d ...
- .net与java建立WebService再互相调用
A: .net建立WebService,在java中调用. 1.在vs中新建web 简单修改一下Service.cs的[WebMethod]代码: using System; using System ...
- 『学了就忘』Linux文件系统管理 — 67、通过命令模式进行LVM分区
目录 1.物理卷管理 (1)准备硬盘或者分区 (2)建立物理卷 (3)查看物理卷 (3)删除物理卷 2.创建卷组 (1)建立卷组 (2)查看卷组 (3)增加卷组容量 (4)减小卷组容量 (5)删除卷组 ...
- Scala(六)【模式匹配】
目录 一.基本语法 二.匹配固定值 三.守卫 四.匹配类型 五.匹配集合 1.Array 2.List 3.元祖 4.对象和样例类 六.偏函数 七.赋值匹配 八.for循环匹配 一.基本语法 在匹配某 ...
- Java Swing布局管理器GridBagLayout的使用示例 [转]
GridBagLayout是java里面最重要的布局管理器之一,可以做出很复杂的布局,可以说GridBagLayout是必须要学好的的, GridBagLayout 类是一个灵活的布局管理器,它不要求 ...
- 转Android Canvas和Paint基本使用
Android Canvas和Paint基本使用 这篇文章主要介绍下画笔Paint和画布Canvas的基本使用 1.Paint 创建对象Paint mPaint = new Paint(); 常 ...
- 【Linux】【Shell】【Basic】Programming
shell脚本编程: 编程语言的分类:根据运行方式 编译运行:源代码-->编译器(编译)-->程序文件 解释运行:源代码-->运行时启动解释器,又解释器边解释边运行 根据其编程过程中 ...
- 渐进式web应用 (PWA)
PWA(渐进式 Web 应用)运用现代的 Web API 以及传统的渐进式增强策略来创建跨平台 Web 应用程序. PWA的特点: Discoverable, 内容可以通过搜索引擎发现. Instal ...
- 【Java基础】ArrayList初始化操作
要用60个零初始化列表,请执行以下操作: List<Integer> list = new ArrayList<Integer>(Collections.nCopies(60, ...
- 【C/C++】vector 动态二维数组
声明 vector<vector<int> vec; //赋值思路可以从这个很基础的操作里看出来 vector<int> a; a.push_back(1); a.pus ...