zoukankan      html  css  js  c++  java
  • 分块随笔T1

    小Z的课堂检测

    时间限制: 1 Sec  内存限制: 128 MB
    提交: -  解决: -
    [提交][讨论版]

    题目描述

    大家都知道小Z的课总是十分快的(鬼知道为什么),然后我们阿M同学总是在上课时处于神游状态亦或是休眠状态,所以她对小Z到底讲了什么是一无所知。然而,小Z总是很坏地打断阿M的休眠状态,并问她问题。作为阿M的开黑好伙伴,你当然不希望阿M同学翻车(不然下一个回答问题的人就是你啦)。所以你需要编写个程序帮助阿M求小Z对于知识点到底讲的档次有多深。已知小Z在课上总会扯到涉及到N个知识点,小Z会进行M个动作(讲课或是提问阿M)。由于小Z比较古灵精怪,所以小Z的讲课时只会讲连续的知识点,并且对于这段区间内的知识点都提升一样的档次。而且,小Z也比较懒,所以小Z只会问阿M关于某一个知识点的了解程度。

    输入

    第一行读入N,表示小Z要涉及到N个知识点
    第二行读入A[1],A[2]……A[N-1],A[N]表示小Z上几节课已经把第i个知识点的     难度提升到A[i]的难度
    第三行读入M,表示小Z要进行M个动作
    接下来M行,读入Choice
    若Choice=1,则表示小Z要讲课啦
    接下来读入L,R,X 表示小Z要对L到R这些连续的知识点提升难度X
    若Choice=2,则表示小Z要提问啦
    接下来读入K,表示小Z问阿M第K个知识点他已经讲到哪个难度了

    输出

    每行输出一个数表示阿M应该回答的正确答案

    样例输入

    10
    1 2 3 4 5 6 7 8 9 10
    5
    1 2 3 4
    2 3
    1 3 4 5
    2 5
    1 5 8 5
    
    
    7
    5 3 7 7 5 8 5
    9
    1 2 7 -1
    2 1
    2 2
    1 2 3 1
    1 2 7 2
    2 2
    1 3 3 -1
    2 3
    2 1
    

    样例输出

    7
    5
    
    
    5
    2
    5
    8
    5
    

    提示

    数据范围

    对于50%的数据,N<=1000,M<=1000

    对于100%的数据,N<=100000,M<=100000 |X|<=50000

    |A[i]|<=50000;
     
    此题花式解,我写了树状数组
    #include<iostream> 
    #include<cstdio> 
    #include<algorithm> 
    using namespace std; 
    #define lowbit(x) x&(-x) 
    int n,m;
    long long a[100005],c1[100005],c2[100005]; 
    void update(int v,int val) 
    { 
        for(int p=v;p<=n;p+=lowbit(p)) 
        c1[p]+=val,c2[p]+=val*v; 
    } 
    long long query(int l,int r) 
    { 
        long long ans=0; 
        l--; 
        for(int p=r;p>0;ans+=(r+1)*c1[p],ans-=c2[p],p-=lowbit(p)); 
        for(int p=l;p>0;ans-=(l+1)*c1[p],ans+=c2[p],p-=lowbit(p)); 
        return(long long) ans; 
    } 
    int main() 
    { 
        scanf("%d",&n); 
        for(int i=1;i<=n;i++) 
        scanf("%d",&a[i]); 
        for(int i=1;i<=n;i++) 
        update(i,a[i]-a[i-1]); 
        scanf("%d",&m); 
        for(int i=1;i<=m;i++) 
        { 
            int x,y,tmp,val; 
            scanf("%d",&tmp); 
            scanf("%d",&x); 
              
            if(tmp==1) 
            { 
                scanf("%d %d",&y,&val); 
                update(x,val);update(y+1,-val); 
            }else
            printf("%lld
    ",query(x,x)); 
        } 
    } 
  • 相关阅读:
    区别@ControllerAdvice 和@RestControllerAdvice
    Cannot determine embedded database driver class for database type NONE
    使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
    Markdown语法笔记
    Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
    Mysql 查看连接数,状态 最大并发数(赞)
    OncePerRequestFilter的作用
    java连接MySql数据库 zeroDateTimeBehavior
    Intellij IDEA 安装lombok及使用详解
    ps -ef |grep xxx 输出的具体含义
  • 原文地址:https://www.cnblogs.com/dancer16/p/6908169.html
Copyright © 2011-2022 走看看