标签:input mac contains 时间 def pre void begin frame
#include<bits/stdc++.h> using namespace std; typedef long long ll; struct node { int st;//记录入点和出点 int flag;//如果是入点就+1,否则就-1 }s[100000*2+100]; int L[100000+100],R[100000+100];//记录机器的开始时间 和 结束时间 bool cmp(node a,node b) { if(a.st != b.st) return a.st<b.st;//就是按照端点排序 else return a.flag < b.flag;//因为区间结束的时候 和另一个区间开始的会重叠 //so 让区间先结束 然后在开始 这样子的吧 } void init() { memset(L,0,sizeof(L)); memset(R,0,sizeof(R)); } int main () { int t; scanf("%d",&t); while (t--) { init(); int n; scanf("%d",&n); int m=0; for(int i=0;i<n;i++) { int st,e; scanf("%d %d",&st,&e); s[m].st = st,s[m++].flag=1;//左端点+1 s[m].st = e,s[m++].flag=-1;//右端点-1 } sort(s,s+m,cmp); int sum=0,ans=0; for(int i=0;i<m;i++) { sum+=s[i].flag; if(sum>ans) { ans = sum; L[sum] = s[i].st; } } sum=0,ans=0; for(int i=m-1;i>=0;i--) { sum-=s[i].flag; if(sum>ans) { ans = sum; R[sum] = s[i].st; } } ll res=0; for(int i=1;i<=ans;i++) { res += (R[i]-L[i]); }//因为最后就是R-L 所以这里不用管 R[i]和L[i]是否对应 cout<<ans<<" "<<res<<endl; } }
标签:input mac contains 时间 def pre void begin frame
原文地址:http://www.cnblogs.com/Draymonder/p/7425415.html