zoukankan      html  css  js  c++  java
  • HDU1754 I Hate It 点修改 区间查询 模板题

      1 #include <cstdio>//大白书上说节点数最多有2*n-1个 n为区间长度 
      2 #include <cstring>//这个题开420000的数组却RE了 换成100W+就过了……sad
      3 #include <cstdlib>
      4 #include <algorithm>
      5 #include <iostream>
      6 
      7 
      8 using namespace std;
      9 
     10 int st[1048576];
     11 int gr[210000];
     12 
     13 int max(int x,int y)
     14 {
     15     return x>=y ? x:y;
     16 }
     17 
     18 int creat(int node,int l,int r)
     19 {
     20     if(l == r)
     21     {
     22         st[node] = gr[l];
     23         return st[node];
     24     }
     25     int m = (l+r)/2;
     26 
     27     st[node] = max(creat(node+node,l,m),creat(node+node+1,m+1,r));
     28 
     29     return st[node];
     30 }
     31 
     32 int query(int ml,int mr,int node,int l,int r)
     33 {
     34     if(ml == l && mr == r)
     35         return st[node];
     36     int m = (l+r)/2;
     37     if(mr <= m)
     38     {
     39         return query(ml,mr,node+node,l,m);
     40     }
     41     if(m < ml)
     42     {
     43         return query(ml,mr,node+node+1,m+1,r);
     44     }
     45     return max(query(ml,m,node+node,l,m),query(m+1,mr,node+node+1,m+1,r));
     46 }
     47 
     48 int change(int site,int grade,int node,int l,int r)
     49 {
     50     if(l == r && r == site)
     51     {
     52         st[node] = grade;
     53         return st[node];
     54     }
     55     int m = (l+r)/2;
     56     if(site <= m)
     57     {
     58         st[node] = change(site,grade,node+node,l,m);
     59         return st[node];
     60     }
     61     if(m < site)
     62     {
     63         st[node] = change(site,grade,node+node+1,m+1,r);
     64         return st[node];
     65     }
     66 }
     67 
     68 int q[110];
     69 void output(int n)
     70 {
     71     int t;
     72     int s = 0,e = 1;
     73     q[0] = 1;
     74     int i = 1,j = 1;
     75     while(1)
     76     {
     77 
     78         t = q[s++];
     79         printf("st[%d] = %d ",t,st[t]);
     80         q[e++] = t+t;
     81         q[e++] = t+t+1;
     82         if(t == n+n-1) break;
     83         if(i == j)
     84         {
     85             i = 1;
     86             j *= 2;
     87             printf("\n");
     88         }
     89         else i++;
     90     }
     91 }
     92 
     93 int main()
     94 {
     95     int n,m,T;
     96     int i;
     97     char order[5];
     98     int l,r;
     99     int site ,grade;
    100 
    101     while(scanf("%d %d",&n,&m) != EOF)
    102     {
    103         for(i = 1;i <= n; i++)
    104             scanf("%d",&gr[i]);
    105 
    106         creat(1,1,n);
    107         //output(n);
    108 
    109         while(m--)
    110         {
    111             scanf("%s",order);
    112             if(order[0] == 'Q')
    113             {
    114                 scanf("%d %d",&l,&r);
    115                 printf("%d\n",query(l,r,1,1,n));
    116                 //output(n);
    117             }
    118             else if(order[0] == 'U')
    119             {
    120                 scanf("%d %d",&site,&grade);
    121                 change(site,grade,1,1,n);
    122                 //output(n);
    123             }
    124         }
    125     }
    126     return 0;
    127 }
  • 相关阅读:
    NHibernate之(12):初探延迟加载机制
    NHibernate之(11):探索多对多关系及其关联查询
    NHibernate之(10):探索父子(一对多)关联查询
    NHibernate之(9):探索父子关系(一对多关系)
    NHibernate之(8):巧用组件之依赖对象
    NHibernate之(7):初探NHibernate中的并发控制
    NHibernate之(5):探索Insert, Update, Delete操作
    NHibernate之(6):探索NHibernate中的事务
    NHibernate之(4):探索查询之条件查询(Criteria Query)
    读写文件
  • 原文地址:https://www.cnblogs.com/zmx354/p/3107053.html
Copyright © 2011-2022 走看看