题目链接

查找长度为5的上升序列总数

用的树状数组+高精度

用树状数组求在i前面比i小的数有几个

用的4个树状数组,A[i][j]表示长度为i的以j为结尾的个数,A[i][j]=A[i-1][1....flag[n]]

对数组下标不能为0一直不太理解,会发生死循环

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <cstring>
  5. using namespace std;
  6. #define N 50005
  7. #define MOD 10000
  8. struct e{
  9. int w,id;
  10. bool operator <(const e &v) const
  11. {
  12. return w<v.w;
  13. }
  14. }a[N];
  15. __int64 A[4][N];
  16. int flag[N],ans[10],n;
  17. int lowbit(int x){ return x&-x; }
  18. void update(int x,int y,__int64 w)
  19. {
  20. while(y<n)
  21. {
  22. A[x][y]+=w;
  23. y+=lowbit(y);
  24. }
  25.  
  26. }
  27. __int64 getsum(int x,int y)
  28. {
  29. __int64 sum=0;
  30. while(y>0)
  31. {
  32. sum+=A[x][y];
  33. y-=lowbit(y);
  34. }
  35. return sum;
  36. }
  37. int ans_sum(__int64 w) //高精度取模
  38. {
  39. int i;
  40. i=0;
  41. while(w>0)
  42. {
  43. ans[i]+=w%MOD;
  44. if(ans[i]>=MOD)
  45. {
  46. ans[i]-=MOD;
  47. ans[i+1]++;
  48. }
  49. w/=MOD;
  50. i++;
  51. }
  52. }
  53. int main()
  54. {
  55. int i,j;
  56. while(scanf("%d",&n)!=EOF)
  57. {
  58. // memset(arr,0,sizeof(arr));
  59. for(i=1;i<=n;i++)
  60. {
  61. scanf("%d",&a[i].w);
  62. a[i].id=i;
  63. }
  64. sort(a,a+n);
  65. memset(ans,0,sizeof(ans));
  66. memset(A,0,sizeof(A));
  67. int mm=0;
  68. flag[a[1].id]=++mm;
  69. for(i=2;i<=n;i++)
  70. {
  71. if(a[i-1].w<a[i].w)
  72. flag[a[i].id]=++mm;
  73. else
  74. flag[a[i].id]=mm;
  75. }
  76. for(i=1;i<=n;i++)
  77. {
  78. __int64 x=1;
  79. for(j=0;j<4;j++)
  80. {
  81. update(j,flag[i],x); //x为长度为j-1的总数
  82. x=getsum(j,flag[i]-1);
  83. }
  84. ans_sum(x); //对满足条件的进行求和
  85. }
  86. int t=0;
  87. for(i=9;i>=0;i--)
  88. {
  89. if(!t&&ans[i]>0)
  90. {
  91. printf("%d",ans[i]);
  92. t=1;
  93. }
  94. else if(t)
  95. printf("%04d",ans[i]);
  96. }
  97. if(!t) printf("0");
  98. printf("\n");
  99. }
  100. return 0;
  101. }

POJ 3378的更多相关文章

  1. [POJ 3378] Crazy Thairs

    Link: POJ 3378 传送门 Solution: 按序列长度$dp$, 设$dp[i][j]$为到第$i$个数,符合要求的序列长度为$j$时的序列个数, 易得转移方程:$dp[i][j]=\s ...

  2. ●POJ 3378 Crazy Thairs

    题链: http://poj.org/problem?id=3378 题解: 树状数组维护,高精度. 依次考虑以每个位置结尾可以造成的贡献. 假设当前位置为i,为了达到5个元素的要求,我们需要求出,在 ...

  3. POJ 3378 Crazy Thairs(树状数组+DP)

    [题目链接] http://poj.org/problem?id=3378 [题目大意] 给出一个序列,求序列中长度等于5的LIS数量. [题解] 我们发现对于每个数长度为k的LIS有dp[k][i] ...

  4. poj 3378 二维树状数组

    思路:直接用long long 保存会WA.用下高精度加法就行了. #include<map> #include<set> #include<cmath> #inc ...

  5. poj 3378 Crazy Thairs dp+线段树+大数

    题目链接 题目大意: 给出n个数, 让你求出有多少个5元组满足 i < j < k < l < m并且ai < aj < ak < al < am 我们 ...

  6. poj很好很有层次感(转)

    OJ上的一些水题(可用来练手和增加自信) (POJ 3299,POJ 2159,POJ 2739,POJ 1083,POJ 2262,POJ 1503,POJ 3006,POJ 2255,POJ 30 ...

  7. POJ题目分类推荐 (很好很有层次感)

    著名题单,最初来源不详.直接来源:http://blog.csdn.net/a1dark/article/details/11714009 OJ上的一些水题(可用来练手和增加自信) (POJ 3299 ...

  8. 【POJ】3378 Crazy Thairs(树状数组+dp+高精)

    题目 传送门:QWQ 分析 题意:给个数列,求有多少五元上升组 考虑简化一下问题:如果题目求二元上升组怎么做. 仿照一下逆序对,用树状数组维护一下就ok了. 三元怎么做呢? 把二元的拓展一位就可以了, ...

  9. POJ刷题记录 (。・`ω´・)(Progress:6/50)

    1743:前后作差可以转化成不可重叠最长公共字串问题,运用后缀数组解决(参考罗穗骞神犇的论文) #include <cstdio> #include <cstring> #in ...

随机推荐

  1. jsonp封装

    //jsonp的封装函数 function jsonp(url,parmter,callback){ //创建script标签 var script=document.createElement('s ...

  2. android 分辨率自适应

    1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托罗拉milestone手机是3.7英寸 A ...

  3. 一个封装HTTP请求的函数(C++)

    这里封装了HTTP请求的,支持GET与POST,并支持各种参数组合,调用方式很简单使用DEVWEB::WebRequest(string(“http://www.luaie.com/”),ret);就 ...

  4. Linux - Eclipse CDT + GCC 安装(2014.10.2)

    Eclipse CDT + GCC 安装 (2014.10.2) 本文地址:http://blog.csdn.net/caroline_wendy 1. 安装Eclipse,在官方站点下载Eclips ...

  5. SVN 代码下载,上传

    代码下载,如: svn co https://99.99.16.1:8080/svn/pavenas/webpy --username bg 代码上传,如: svn commit -m "备 ...

  6. 在Ubuntu下的Apache上建立新的website,以及enable mono

    1. 在Apache下建立新的web site a. $>cd /etc/apache2/ b. $>vi ports.conf 填加Listen 8090(注意不要打开8080,因为To ...

  7. 前端笔试题目总结——应用JavaScript函数递归打印数组到HTML页面上

    数组如下: var item=[{ name:'Tom', age:70, child:[{ name:'Jerry', age:50, child:[{ name:'William', age:20 ...

  8. (转)WITH (NOLOCK)

    缺点: 1.会产生脏读 2.只适用与select查询语句 优点: 1.有些文件说,加了WITH (NOLOCK)的SQL查询效率可以增加33%. 2.可以用于inner join 语句 脏读: 一个用 ...

  9. Swift 流程控制

    import Foundation ...{ == { print(index) } } // 可选变量 类型后面加? var myName:String?="jikexueyuan&quo ...

  10. 报错:/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.29.5/UITableView.m:7943解决方法

    环境:Xcode7.1.1 详细错误: *** Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], ...