zoukankan      html  css  js  c++  java
  • 线段树(updata+query)

    I Hate It

    Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 7182    Accepted Submission(s): 2583

    Problem Description
    很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。
    这让很多学生很反感。

    不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
     
    Input
    本题目包含多组测试,请处理到文件结束。
    在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。
    学生ID编号分别从1编到N。
    第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。
    接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。
    当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。
    当C为'U'的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
     
    Output
    对于每一次询问操作,在一行里面输出最高成绩。
     
    Sample Input
    5 6
    1 2 3 4 5
    Q 1 5
    U 3 6
    Q 3 4
    Q 4 5
    U 2 9
    Q 1 5
    Sample Output
    5
    6
    5
    9
    Hint
    Huge input,the C function scanf() will work better than cin
     1 /*******************************
     2 
     3 Date    : 2015-11-17 21:40:22
     4 Author  : WQJ (1225234825@qq.com)
     5 Link    : http://www.cnblogs.com/a1225234/
     6 Name     : HD1754
     7 
     8 ********************************/
     9 #include <iostream>
    10 #include <cstdio>
    11 #include <algorithm>
    12 #include <cmath>
    13 #include <cstring>
    14 #include <string>
    15 #include <set>
    16 #include <vector>
    17 #include <queue>
    18 using namespace std;
    19 const int Max=200000+5;
    20 int sc[Max],segTree[Max<<2];
    21 int l,r;
    22 int build(int node,int begin,int end)
    23 {
    24     int mid=(begin+end)/2;
    25     if(begin==end)    segTree[node]=sc[end];
    26     else{
    27         build(node*2,begin,mid);
    28         build(node*2+1,mid+1,end);
    29         segTree[node]=max(segTree[node*2],segTree[node*2+1]);
    30     }
    31     return 0;
    32 }
    33 int query(int node,int begin,int end)
    34 {
    35     int p1,p2;
    36     int mid=(begin+end)/2;
    37     if(r<begin||l>end)    return -1;
    38     if(l<=begin&&end<=r)
    39         return segTree[node];
    40     p1=query(node*2,begin,mid);
    41     p2=query(node*2+1,mid+1,end);
    42     if(p1==-1)    return p2;
    43     if(p2==-1)    return p1;
    44     return max(p1,p2);
    45 }
    46 int updata(int node,int begin,int end,int pos,int e)
    47 {
    48     int mid=(begin+end)/2;
    49     if(begin==end)
    50     {
    51         segTree[node]=e;
    52         return 0;
    53     }
    54     if(pos<=mid)
    55         updata(node*2,begin,mid,pos,e);
    56     else
    57         updata(node*2+1,mid+1,end,pos,e);
    58     segTree[node]=max(segTree[node*2],segTree[node*2+1]);
    59     return 0;
    60 }
    61 int main()
    62 {    
    63     int N,M;
    64     int i,j,k,e;
    65     char ch;
    66     freopen("in.txt","r",stdin);
    67     while(scanf("%d%d",&N,&M)!=EOF)
    68     {
    69         memset(segTree,0,sizeof(segTree));
    70         for(i=0;i<N;i++)
    71         {
    72             scanf("%d",&e);
    73             sc[i]=e;
    74         }
    75         build(1,0,N-1);
    76         //for(i=0;i<20;i++)
    77         //    cout<<segTree[i]<<" ";
    78         for(i=0;i<M;i++)
    79         {
    80             int a,b;
    81             getchar();
    82             scanf("%c%d%d",&ch,&a,&b);
    83             if(ch=='Q')
    84             {
    85                 l=a-1,r=b-1;
    86                 cout<<query(1,0,N-1)<<endl;
    87             }
    88             else if(ch=='U')
    89             {
    90                 updata(1,0,N-1,a-1,b);
    91             }
    92         }
    93     }
    94     return 0;
    95 }
  • 相关阅读:
    MFC加载皮肤 转自:http://www.cctry.com/thread-4032-1-1.html
    内存不能为read修复方法:(转自:网上(忘记了))
    Kalendar server Beijing Tiandiyuandian Technology Limited 果然是木马
    牛人面经
    安装graphlab伤透了心,终于搞定了
    哨兵模式下,master选举关键点
    redis哨兵模式,数据尽量少的丢失
    使用@import导入实现了ImportBeanDefinitionRegistrar接口的类,不能被注册为bean
    redis使用rdb恢复数据
    spring boot动态数据源方案
  • 原文地址:https://www.cnblogs.com/a1225234/p/4973097.html
Copyright © 2011-2022 走看看