用单调栈的话不严格的O(n^3)可以轻松艹过去,统计的时候要差分。

  可以发现,对于一个单调栈里的元素,从它进栈到出栈都会重复类似的计算。。再差分一波后就可以只在出栈的时候计算一下了。

  具体的话看代码吧。。

O(n^3):

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<queue>
  6. #define ll long long
  7. #define ui unsigned int
  8. #define ull unsigned long long
  9. using namespace std;
  10. const int maxn=;
  11. char s[maxn];
  12. int h[maxn],st[maxn],l[maxn];
  13. int an[maxn][maxn];
  14. int i,j,k,n,m;
  15.  
  16. int ra,fh;char rx;
  17. inline int read(){
  18. rx=getchar(),ra=,fh=;
  19. while((rx<''||rx>'')&&rx!='-')rx=getchar();
  20. if(rx=='-')fh=-,rx=getchar();
  21. while(rx>=''&&rx<='')ra*=,ra+=rx-,rx=getchar();return ra*fh;
  22. }
  23. inline void add(int y1,int x2,int y2){
  24. // printf("add:1,%d %d,%d\n",y1,x2,y2);
  25. an[x2][y2]++,an[x2][y1-]--;
  26. }
  27. inline void addall(int len,int st2,int h){
  28. for(register int i=;i<=len;i++)an[h][i+st2]++,an[h][i-]--;
  29. // add(i,h,i+st2);
  30. // an[h][1+st2]++,an[h][len+st2+1]--,
  31. // an[h][0]--,an[h][len]++;
  32. }
  33.  
  34. char ss[];int len;
  35. inline void outx(int x){
  36. if(!x){putchar('');return;}
  37. while(x)ss[len++]=x%,x/=;
  38. while(len)putchar(ss[--len]+);
  39. }
  40. int main(){
  41. n=read(),m=read();//register int k;
  42. for(i=;i<=n;i++){
  43. scanf("%s",s+);
  44. int top=;
  45. for(j=;j<=m+;j++){
  46. h[j]=s[j]==''?h[j]+:;
  47. while(top&&h[st[top]]>=h[j])addall(j-st[top],st[top]-l[top],h[st[top]]),top--;
  48. st[++top]=j,l[top]=st[top-]+;
  49. //for(k=1;k<=top;k++)add(j-st[k]+1,h[st[k]],j-l[k]+1);
  50. }
  51. }
  52. // for(i=1;i<=n;i++)for(j=1;j<=m;j++)an[i][j]+=an[i][j-1];
  53. // for(i=1;i<=n;printf("%d\n",an[i][m]),i++)for(j=1;j<m;j++)printf("%d ",an[i][j]);
  54. for(i=n;i;i--)for(j=m;j;j--)an[i][j]+=an[i+][j]+an[i][j+]-an[i+][j+];
  55. for(i=;i<=n;outx(an[i][m]),putchar('\n'),i++)for(j=;j<m;j++)outx(an[i][j]),putchar(' ');
  56. }

O(n^2):

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<queue>
  6. #define ll long long
  7. #define ui unsigned int
  8. #define ull unsigned long long
  9. using namespace std;
  10. const int maxn=;
  11. char s[maxn];
  12. int h[maxn],st[maxn],l[maxn];
  13. int an[maxn][maxn];
  14. int i,j,k,n,m;
  15.  
  16. int ra,fh;char rx;
  17. inline int read(){
  18. rx=getchar(),ra=,fh=;
  19. while((rx<''||rx>'')&&rx!='-')rx=getchar();
  20. if(rx=='-')fh=-,rx=getchar();
  21. while(rx>=''&&rx<='')ra*=,ra+=rx-,rx=getchar();return ra*fh;
  22. }
  23.  
  24. inline void addall(int len,int st2,int h){
  25. an[h][+st2]++,an[h][len+st2+]--,
  26. an[h][]--,an[h][len]++;
  27. }
  28.  
  29. char ss[];int len;
  30. inline void outx(int x){
  31. if(!x){putchar('');return;}
  32. while(x)ss[len++]=x%,x/=;
  33. while(len)putchar(ss[--len]+);
  34. }
  35. int main(){
  36. n=read(),m=read();register int i,j;
  37. for(i=;i<=n;i++){
  38. scanf("%s",s+);
  39. int top=;
  40. for(j=;j<=m+;j++){
  41. h[j]=s[j]==''?h[j]+:;
  42. while(top&&h[st[top]]>=h[j])addall(j-st[top],st[top]-l[top],h[st[top]]),top--;
  43. st[++top]=j,l[top]=st[top-]+;
  44. }
  45. }
  46. for(i=;i<=n;i++)for(j=;j<=m;j++)an[i][j]+=an[i][j-];
  47. for(i=;i<=n;i++)an[i][m+]=;for(i=;i<=m;i++)an[n+][i]=;
  48. for(i=n;i;i--)for(j=m;j;j--)an[i][j]+=an[i+][j]+an[i][j+]-an[i+][j+];
  49. for(i=;i<=n;outx(an[i][m]),putchar('\n'),i++)for(j=;j<m;j++)outx(an[i][j]),putchar(' ');
  50. }

[51nod1291]Farmer的更多相关文章

  1. Codeforces Round #102 (Div. 1) A. Help Farmer 暴力分解

    A. Help Farmer 题目连接: http://www.codeforces.com/contest/142/problem/A Description Once upon a time in ...

  2. HDU 4380 Farmer Greedy 计算几何+bitset

    枚举直线,对于直线的某个点在直线的左端还是右端,能够状压出一个数.用bitset记录. 然后三角形就是3个bitset&一下 #include <cstdio> #include ...

  3. CodeForces 143C Help Farmer

    暴力枚举. 枚举最小的那个数字,不会超过$1000$,剩下的两个数字根号的效率枚举一下即可. #include<bits/stdc++.h> using namespace std; lo ...

  4. A Code Farmer‘s Entertainment

    My guitar playing and singing 码农的自娱自乐 https://v.youku.com/v_show/id_XNDM4NTY1MTEwNA==.html?spm=a2hzp ...

  5. HDU 4380 Farmer Greedy(叉积和三角形知识的综合应用)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=115760#problem/A 题目意思大致为由n个点(n小于100)和m个金矿 ...

  6. bzoj1584--DP

    题目大意:有N头奶牛,每头那牛都有一个标号Pi,1 <= Pi <= M <= N <= 40000.现在Farmer John要把这些奶牛分成若干段,定义每段的不河蟹度为:若 ...

  7. Qt5 开发 iOS 应用之访问 SQLite 数据库

    开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1   源代码: 我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10.An ...

  8. POJ 3254. Corn Fields 状态压缩DP (入门级)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9806   Accepted: 5185 Descr ...

  9. hdu2848 Visible Trees (容斥原理)

    题意: 给n*m个点(1 ≤ m, n ≤ 1e5),左下角的点为(1,1),右上角的点(n,m),一个人站在(0,0)看这些点.在一条直线上,只能看到最前面的一个点,后面的被档住看不到,求这个人能看 ...

随机推荐

  1. C++ 知识点总结复习

    C++ 1.C++是静态类型语言,使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查. 2.面向对象程序设计 C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性: 封 ...

  2. ios 访问隐私信息 info.plist 中的字段

    1.iOS10相册相机闪退bug: iOS10系统下调用系统相册,相机功能,遇到闪退的情况,描述如下: This app has crashed because it attempted to acc ...

  3. 【USACO】玉米实验(单调队列)

    Description 约翰决定培育新的玉米品种以提高奶牛的产奶效率.约翰所有的土地被分成 N ×N 块,其中第 r行第 c 列的玉米质量为 Ar,c.他打算找一块质量比较均匀的土地开始自己的实验.经 ...

  4. Linux 学习记录 二 (文件的打包压缩).

     前言:本文参考<鸟哥的Linux 私房菜>,如有说的不对的地方,还请指正!谢谢!  环境:Centos 6.4    和window不同,在Linux压缩文件需要注意的是,压缩后的文件会 ...

  5. geoserver发布地图服务WMS

    wms服务发布: 1.打开geoserver管理首页(网址为http://localhost:8080/geoserver/web/),并使用安装时设置的帐户名和密码登录(这里是admin/geose ...

  6. 基于 HTML5 WebGL 的 3D 场景中的灯光效果

    构建 3D 的场景除了创建模型,对模型设置颜色和贴图外,还需要有灯光的效果才能更逼真的反映真实世界的场景.这个例子我觉得既美观又代表性很强,所以拿出来给大家分享一下. 本例地址:http://www. ...

  7. 虚拟机创建流程中neutron代码分析(一)

    前言: 在openstack的学习当中有一说法就是网络占学习时间的百分之七十.这个说法或许有夸大的成分,但不可否认的是openstack中的 网络是及其重要的部分,并且难度也是相当大.试图通过nova ...

  8. nova创建虚拟机源码分析系列之四 nova代码模拟

    在前面的三篇博文中,介绍了restful和SWGI的实现.结合restful和WSGI配置就能够简单的实现nova服务模型的最简单的操作. 如下的内容是借鉴网上博文,因为写的很巧妙,将nova管理虚拟 ...

  9. 从底层角度看ASP.NET-A low-level Look at the ASP.NET...

    从更低的角度 这篇文章在一个底层的角度来关注一个web请求怎样到达asp.net框架,从web服务器,通过ISAPI.看看这些后面发生了什么,让我们停止对asp.net的黑箱猜想.ASP.NET是一个 ...

  10. [编织消息框架][JAVA核心技术]cglib动态代理

    先在mavne项目里添加cglib库 maven仓库搜索cglib版本 maven地址:http://mvnrepository.com/ 点击最新的版本 3.2.5 复制到pom.xml  depe ...