标记数组(哈希)
1e6的范围,开一个char数组全然能够,有人为1,无人为0,注意边界就可以。最后线性扫描就可以。
时间复杂度,应该是O(n),n为最后结束的时间。
缺点就是……比較慢
/* ID:twd30651 PROG:milk2 LANG:C++ */ #include<iostream> #include<fstream> #include<string.h> #include<stdlib.h> char a[1000001]; using namespace std; int N; int main(int argc,char *argv[]) { freopen("milk2.in","r",stdin); freopen("milk2.out","w",stdout); scanf("%d",&N); memset(a,0,sizeof(a)); int start; int end; int mins=1000000; int maxe=0; for(int i=0;i<N;++i) { scanf("%d",&start); scanf("%d",&end); if(start<mins)mins=start; if(end>maxe)maxe=end; for(int j=start;j<end;++j) a[j]=1; } int max1=0; int max2=0; int l1=0; int l2=0; int flag1=1; int flag2=0; int i=1; //printf("%d %d\n",mins,maxe); for(i=mins;i<maxe;++i) { if(flag1==a[i]) { ++l1; if(l1>max1)max1=l1; } else l1=0; if(flag2==a[i]) { ++l2; if(l2>max2)max2=l2; } else { l2=0; } } printf("%d %d\n",max1,max2); return 0; }
时间: 2024-10-24 20:02:16