• COGS 827. [Tyvj Feb11] 网站计划


    输入文件:web.in   输出文件:web.out   简单对比
    时间限制:1 s   内存限制:128 MB

    描述 Description  
      Tyvj的Admin--zhq同学将在寒假开始实行Tyvj new web计划,把Tyvj打造成为中国一流的信息学在线评测系统。Tyvj的new web计划里一共有n项,编号1~n,每项的重要度为v[i],Admin—zhq同学共工作m次,第j次从编号为l[j]~r[j]的项目里选择重要度最大的一项任务完成,所获得的进展量为(l[j]+r[j])*该任务的重要度。完成该任务后该任务的重要度变为0。请问Admin在工作m次后可以有多少进展量呢?

    注:数据保证初始情况下所有任务的重要度不同。






     
    输入格式 Input Format
     第一行为n,m
    第二行n个整数v[i]。
    接下来m行,每行两个整数l,r,表示Admin这一次将会从编号为l~r的项目里选择(包括l,r)重要度最大的来完成。


    输出格式 Output Format
     
      最终的进展量。由于结果可能会比较大,你只需要输出mod2011之后的结果即可。



    输出格式 Output Format
     
      最终的进展量。由于结果可能会比较大,你只需要输出mod2011之后的结果即可。

    样例输入:

    5 3
    1 2 3 4 5
    1 3
    2 3
    1 5

     

    样例输出:

    52

    线段树

    RMQ 单点修改

    屠龙宝刀点击就送

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    typedef long long LL;
    struct node
    {
        LL l,r,dis,v;
    }t[200000*4+1];
    LL whr,to,maxn,n,m;
    void up(LL k)
    {
        if(t[k<<1].dis>t[k<<1|1].dis)
        {
            t[k].dis=t[k<<1].dis;
            t[k].v=t[k<<1].v;
        }
        else 
        {
            t[k].dis=t[k<<1|1].dis;
            t[k].v=t[k<<1|1].v;
        }
    }
    void build(LL l,LL r,LL k)
    {
        t[k].l=l;t[k].r=r;
        if(l==r)
        {
            scanf("%d",&t[k].dis);
            t[k].v=t[k].l;
            return; 
        }
        LL mid=(l+r)>>1;
        build(l,mid,k<<1);
        build(mid+1,r,k<<1|1);
        up(k);
    }
    void query(LL l,LL r,LL k)
    {
        if(t[k].l==l&&t[k].r==r)
        {
            if(t[k].dis>maxn)
            {
                maxn=t[k].dis;
                whr=t[k].v;
            }
            return;
        }
        LL mid=(t[k].l+t[k].r)>>1;
        if(r<=mid) query(l,r,k<<1);
        else if(l>mid) query(l,r,k<<1|1);
        else 
        {
            query(l,mid,k<<1);
            query(mid+1,r,k<<1|1);
        }
    }
    void delet(LL now,LL k)
    {
        if(t[k].l==t[k].r)
        {
            t[k].dis=0;
            t[k].v=0;
            return;
        }
        LL mid=(t[k].l+t[k].r)>>1;
        if(mid>=now) delet(now,k<<1);
        else if(mid<now) delet(now,k<<1|1);
        up(k);
    }
    int main()
    {
        freopen("web.in","r",stdin);
        freopen("web.out","w",stdout);
        cin>>n>>m;
        build(1,n,1);
        LL u,v;
        long long ans=0;
        while(m--)
        {
            cin>>u>>v;
            maxn=0;whr;
            query(u,v,1);
            delet(whr,1);
            ans+=(u+v)*maxn%2011;
            ans%=2011;
        }
        cout<<ans;
        return 0;
    }
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    mysql 练习
    linux 常用软件安装-目录
    Python 三大神器
    Mysql 数据库安装配置
    Mysql数据库入门
    maven的安装与基本使用
    分布式事务
    分布式锁
    springcloud学习笔记
    springboot入门使用
  • 原文地址:https://www.cnblogs.com/ruojisun/p/6683714.html
Copyright © 2020-2023  润新知