蒟蒻KC的垃圾数列

题目背景

在某教练的强迫之下,我一个蒟蒻居然出题了!!!出题了!!!(数据太水别找我qwq)

好的,JL说好的一题100快拿来

题目描述

首先,给你一个空的长度为n的序列(废话)

然后,你有一系列神奇操作,好吧好吧,只有一个,那就是:

L R K D:给出一个长度等于R-L+1的等差数列,首项为K,公差为D,并将它对应加到a[L]~a[R]的每一个数上。即:令a[L]=a[L]+K,a[L+1]=a[L+1]+K+D(假装没有抄袭洛谷P1438题面)

这个操作有m次。

我还要问你q个问题:(当然,是在m次操作之后)

即前1个,2个……q个数的和。(答案可能太大,请输出ans%(10^9+7))

输入格式

第一行两个整数数n,m,q,表示数列长度和操作个数。 接下来的m行,表示操作,即 L R K D

输出格式

对于每个询问,输出答案,每个答案占一行。(也就是q行,答案%(10^9+7))

输入输出样例

输入 #1

5 2 5
2 3 4 5
2 4 1 2

输出 #1

0
5
17
22
22

说明/提示

样例最后序列为0 5 12 5 0

数据范围:

0%是 样例(别打表)

30% 0<=n<=10000,0<=m<=10000

60% 0<=n<=100000,0<=m<=100000

100% 0<=n<=10000000,0<=m<=10000000

100%数据满足 0<=q<=min(n,1000000)

毒瘤出题人,暴力能拿60.。。。。。

#include<cstdio>

using namespace std;

const int MOD=1000000007;

const int Q=2000005;

int a[Q],b[Q],n,m,q,i,l,r,k,d;

long long ans=0;

inline int read(){
    int s=0,w=1;
    char ch=getchar();
    while(ch<‘0‘||ch>‘9‘){
        if(ch==‘-‘){
            w=-1;
        }
        ch=getchar();
    }
    while(ch>=‘0‘&&ch<=‘9‘){
        s=s*10+ch-‘0‘;
        ch=getchar();
    }
    return s*w;
}

int main(){
    n=read();
    m=read();
    q=read();
    for(i=1;i<=m;i++){
        int x,y;
        l=read();
        r=read();
        k=read();
        d=read();
        x=l+1;
        y=r+1;
        a[l]+=k;
        a[l]%=MOD;
        a[y]-=k+(r-l)*d;
        b[x]+=d;
        b[x]%=MOD;
        b[y]-=d;
    }
    for(i=1;i<=q;i++){
        b[i]+=b[i-1];
        b[i]%=MOD;
    }
    for(i=1;i<=q;i++){
        a[i]+=b[i];
        a[i]%=MOD;
    }
    for(i=1;i<=q;i++){
        a[i]+=a[i-1];
        a[i]%=MOD;
    }
    for(i=1;i<=q;i++){
        ans+=a[i]%MOD;
        ans%=MOD;
        printf("%lld\n",ans);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/hrj1/p/11357192.html

时间: 2024-07-30 17:52:29

蒟蒻KC的垃圾数列的相关文章

bzoj 4636: 蒟蒻的数列

4636: 蒟蒻的数列 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知 道N次操作后数列中所有元素的和.他还要玩其他游戏,所以这个问题留给你解决. Input 第一行一个整数N,然后有N行,每行三个正整数a.b.k. N<=40000 , a.b.k<=10^9 Output 一个数,数列中所有元素的和 Sample Input 4 2 5

【BZOJ】4636: 蒟蒻的数列

4636: 蒟蒻的数列 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 145  Solved: 71[Submit][Status][Discuss] Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知 道N次操作后数列中所有元素的和.他还要玩其他游戏,所以这个问题留给你解决. Input 第一行

【BZOJ-4636】蒟蒻的数列 动态开点线段树 ||(离散化) + 标记永久化

4636: 蒟蒻的数列 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 247  Solved: 113[Submit][Status][Discuss] Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知 道N次操作后数列中所有元素的和.他还要玩其他游戏,所以这个问题留给你解决. Input 第一

bzoj4636: 蒟蒻的数列

Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知 道N次操作后数列中所有元素的和.他还要玩其他游戏,所以这个问题留给你解决. Input 第一行一个整数N,然后有N行,每行三个正整数a.b.k. N<=40000 , a.b.k<=10^9 Output 一个数,数列中所有元素的和 一个位置最终的值是覆盖它的所有区间的k的最大值 离散化,堆维

【BZOJ4636】蒟蒻的数列 STL

[BZOJ4636]蒟蒻的数列 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知 道N次操作后数列中所有元素的和.他还要玩其他游戏,所以这个问题留给你解决. Input 第一行一个整数N,然后有N行,每行三个正整数a.b.k. N<=40000 , a.b.k<=10^9 Output 一个数,数列中所有元素的和 Sample Input 4

BZOJ_4636_蒟蒻的数列_线段树+动态开点

Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知 道N次操作后数列中所有元素的和.他还要玩其他游戏,所以这个问题留给你解决. Input 第一行一个整数N,然后有N行,每行三个正整数a.b.k. N<=40000 , a.b.k<=10^9 Output 一个数,数列中所有元素的和 Sample Input 4 2 5 1 9 10 4 6

[bzoj4636]蒟蒻的数列_线段树

蒟蒻的数列 bzoj-4636 题目大意:给定一个序列,初始均为0.n次操作:每次讲一段区间中小于k的数都变成k.操作的最后询问全局和. 注释:$1\le n\le 4\cdot 10^4$. 想法:那个操作就是一个不好好说话的操作,说白了就是对区间的每一个数取max 然后我们对于那个序列建立分治线段树.每个操作我都把它挂在对应的log的点上. n个操作都执行完了之后我们从1号节点深搜,更新答案即可. 最后,附上丑陋的代码... ... #include <iostream> #include

蒟蒻林荫小复习——关于有限制区间元素查询的一些解法

如题:本文主要说明对于区间有限制查询的一些解法(其实就两种) 问题1:给定一个数列,要求查询区间L—R中所有大于等于Va小于等于Vb的元素和 解法: 1.线段树套权值线段树 第一维维护区间,第二维作为权值线段树,维护值域在A—B之间的元素之和 每次查询就从第一维拉到对应区间,然后用Va和Vb确定在权值线段树中的查询范围即可 2.分块 分块数组记为a,对每一个a块都开一个数组b,b数组将a块中元素拷贝后排序,新建c,对于每一个b都求前缀和 这样对于整块而言,用二分确定Va和Vb在b数组中的位置Ia

蒟蒻ACMer回忆录 &#183; 一段弱校ACM的奋斗史

三年半的ACM生涯终于迎来了终点,退役之时,感慨万分,故写此文以纪念逝去的时光,那些为ACM拼搏的日子,那段弱校ACM的奋斗史. 三年半的ACM生涯,窝见证了CUMT从打铁到铜牌的突破,又见证了从铜牌到银牌的突破:见证了集训队员从3人发展到10余人,又见证了ACM实验室的落实. 三年半的ACM生涯,窝经历了太多,有Accepted时的欢笑,有Wrong Answer时的沮丧,有Time Limit Exceeded时的无奈,有Runtime Error时的尴尬,有打铁的失落,有拿牌的惊喜. 13