zoukankan      html  css  js  c++  java
  • 树状数组

    1. #include <vector>
    2. #include <queue>
    3. #include <stack>
    4. #include <set>
    5. #include <map>
    6. #include <algorithm>
    7. #include <iostream>
    8. #include <stdio.h>
    9. #include <string.h>
    10. using namespace std;
    11. #define MAXN 200020
    12. #define MAX(a,b) (a>b?a:b)
    13. #define Lowbit(x) (x & (-x))
    14. int num[MAXN]={0,3,1,2,4,5,8,7,9,6};//注意从下标为1的位置开始保存数据
    15. int C[MAXN];
    16. int Query(int l,int r){
    17. int ans=num[r];
    18. while(true){
    19. ans=MAX(ans,num[r]);
    20. if(r==l) break;
    21. for(r-=1;r-l>=Lowbit(r);r-=Lowbit(r)){
    22. ans=MAX(ans,C[r]);
    23. }
    24. }
    25. return ans;
    26. }
    27. void Modify(int p,int val,int end){
    28. num[p]=val;
    29. for(int i=p;i<=end;i+=Lowbit(i)){
    30. C[i]=val;
    31. for(int j=1;j<Lowbit(i);j<<=1){
    32. C[i]=MAX(C[i],C[i-j]);
    33. }
    34. }
    35. }
    36. int main(int argc, char *argv[])
    37. {
    38. int n,m;
    39. char op[3];
    40. int s,e;
    41. while(scanf("%d%d",&n,&m)!=EOF){
    42. memset(C,0,sizeof(C));
    43. memset(num,0,sizeof(num));
    44. for(int i=1;i<=n;i++){
    45. scanf("%d",&num[i]);
    46. Modify(i,num[i],n);
    47. }
    48. while(m--){
    49. scanf("%s%d%d",op,&s,&e);
    50. if(op[0]=='Q')
    51. printf("%d ",Query(s,e));
    52. else
    53. Modify(s,e,n);
    54. }
    55. }
    56. }





    附件列表

    • 相关阅读:
      NVI模式
      C#----接口与多继承
      C#----接口与抽象类
      C#----接口的显式实现
      C# -- 继承规则
      MVC多层架构
      BootStrap2学习日记23---弹出对话框
      APP导航设计九法
      DevExpress Grid使用checkBox选中的方法
      遗漏的SQL语句
    • 原文地址:https://www.cnblogs.com/sober-reflection/p/2e520cd60afc988c2d567742d7b663aa.html
    Copyright © 2011-2022 走看看