9.22
来源:互联网 发布:c语言中flag of zero 编辑:程序博客网 时间:2024/05/29 19:30
100+30+70=200
T1水题,单调队列
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cmath>#define N 2005using namespace std;int n,m,ans,a[N],f[N][N],l[N],r[N],q[N];int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++)scanf("%d",&a[j]); for(int j=m;j>=1;j--)f[i][j]=a[j]?f[i][j+1]+1:0; } for(int i=1,j,top;i<=m;i++){ for(j=1,top=0;j<=n;j++){ while(top>0&&f[q[top]][i]>=f[j][i])top--; l[j]=q[top]; q[++top]=j; } for(j=n,top=0,q[0]=n+1;j>=1;j--){ while(top>0&&f[q[top]][i]>=f[j][i])top--; r[j]=q[top]; q[++top]=j; } for(j=1;j<=n;j++) ans=max(ans,min(r[j]-l[j]-1,f[j][i])); } printf("%d\n",ans); return 0;}
T2标程,数据都是错的,其实A了
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#define LL long longusing namespace std;struct data{ LL x,y; bool operator < (const data &a)const{ if(x==a.x)return y<a.y; return x<a.x; }}d[10005];int n,f[10005],ans;LL c[10005];int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lld%lld",&d[i].x,&d[i].y); sort(d+1,d+n+1); for(int i=1;i<=n;i++)c[i]=d[i].y; for(int i=n;i>=1;i--){ f[i]=1; for(int j=n;j>i;j--)if(c[j]<c[i]) f[i]=max(f[i],f[j]+1); ans=max(ans,f[i]); } printf("%d\n",ans); return 0;}
T3,莫队+O3+快读卡过。。
正解只按左端点排序,又是根号算法。。。
#pragma GCC optimize ("O3")#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cmath>#define N 1000050using namespace std;int be[N],n,m,nn,a[N],f[N];struct QQ{ int l,r,id;}qu[N];bool cmp1(QQ a,QQ b){ if(be[a.l]!=be[b.l])return be[a.l]<be[b.l]; if(a.r!=b.r)return a.r<b.r; return a.l<b.l; }int num[N];void work(){ int l=1,r=0,sum=0; for(int i=1;i<=m;++i){ while(r<qu[i].r){ ++r;++num[a[r]]; if(num[a[r]]==a[r])++sum; if(num[a[r]]==a[r]+1)--sum; } while(r>qu[i].r){ --num[a[r]]; if(num[a[r]]==a[r])++sum; if(num[a[r]]==a[r]-1)--sum; --r; } while(l<qu[i].l){ --num[a[l]]; if(num[a[l]]==a[l])++sum; if(num[a[l]]==a[l]-1)--sum; ++l; } while(l>qu[i].l){ --l;++num[a[l]]; if(num[a[l]]==a[l])++sum; if(num[a[l]]==a[l]+1)--sum; } f[qu[i].id]=sum; }}int read(){ int a=0;char ch=getchar(); while(ch<'0'||ch>'9')ch=getchar(); while(ch>='0'&&ch<='9'){a=a*10+(ch^48);ch=getchar();} return a;}int main(){ //freopen("test.in","r",stdin); //freopen("my.out","w",stdout); n=read(); m=read(); //nn=(int)sqrt(n); nn=2000; for(int i=1;i<=n;i++){ a[i]=read(); be[i]=(i-1)/nn+1; } for(int i=1;i<=m;i++){ qu[i].l=read();qu[i].r=read(); qu[i].id=i; } sort(qu+1,qu+m+1,cmp1); work(); for(int i=1;i<=m;i++) printf("%d\n",f[i]); return 0;}
阅读全文
0 0
- 9.22
- 9.22
- 9.22
- 9.22
- 9.22
- Reflection2017.9.22
- 9.22 继续加油!学习~
- 9.22 英语单词回顾
- 本我何在(9.22)
- Java细节(9.22)
- 9.22烽火众智
- 9.22 中兴笔试
- 9.22 ASIHTTPd导入库
- 9.22问题总结
- java学习9.22
- hbase0.9.22全新api
- 9.22上机操作代码
- 9.22上机操作代码
- xutils3.0网络请求的关键代码 (这么挨着写是为了区分和2.0之间的区别)
- HDOJ2005
- Photon_PhotonServer安装_009
- 最简单的js判断密码强度
- Ingress使用详解
- 9.22
- eclipse bookmark的使用
- Maven入门-3-在windows7上创建第一个Maven项目
- NOIP2000提高组 乘积最大
- Fabrik – 在浏览器中协作构建,可视化,设计神经网络
- 服务器共享磁盘
- 【leetcode】189. Rotate Array(Python & C++)
- servlet之编码问题
- 工作坊