P2781 传教

题目背景

写完暑假作业后,bx2k去找pear玩。pear表示他要去汉中传教,于是bx2k准备跟着去围观。

题目描述

pear把即将接受传教的人排成一行,每个人从左到右的编号为1-n。每个人有一个信仰值,一开始所有人的信仰值为0。接着pear会做以下两件事之一:

1.pear向连续的一段人群传教。具体来说,pear会使第l个人到第r个人之间的所有人的信仰值增加k。

2.pear想知道某一段人的信仰值之和来得知泉岭精神是否深入人心。具体来说,pear会问bx2k第l个人到第r个人之间所有人的信仰值之和。

身为一个泉岭精神的信徒,bx2k自然会帮pear来算。但是bx2k太笨了,根本不会算。于是他想找你来帮忙。

输入输出格式

输入格式:

第一行包含两个整数n,m。分别表示接受传教的人数以及pear的操作数。

接下来m行,每行包含若干个整数。若第一个整数为1,则代表pear在进行传教,这一行接下来会包含l,r,k三个整数。否则第一个整数为2,代表pear的一个询问,这一行接下来会包含l,r两个整数。

输出格式:

输出若干行,每行包含1个整数,表示pear询问的答案。行数为pear的询问数量。

输入输出样例

输入样例#1: 复制

5 5
2 1 2
1 4 4 2
1 2 4 7
1 4 5 6
2 3 4
输出样例#1: 复制

0
22

说明

【样例说明】

一开始所有人的信仰值都为0,所以答案为0。到第五个操作时,五个人的信仰值分别为0,7,7,15,6。则答案为7+15=22

【数据范围与约定】

对于1-3测试点,n,m<=10

对于4-5测试点,n,m<=10^3

对于6-8测试点,没有传教操作。

对于所有测试点,n<=10^9,m<=10^3,0<l<=n,0<r<=n,k<=10

搜索??

明明是线段树裸题好不好,哈哈,恭喜你,编译都过不了、、(数据范围10^9)

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 100000000
using namespace std;
int n,p,a,b,c,Q,ans;
int read()
{
    ,f=; char ch=getchar();
    ;ch=getchar();}
    +ch-',ch=getchar();
    return x*f;
 }
struct Tree
{
    int v,l,r,f;
}tree[N];
void build(int k,int l,int r)
{
    tree[k].l=l,tree[k].r=r;
    if(l==r) return ;
    ;
    build(k<<,l,mid); build(k<<|,mid+,r);
    tree[k].v=tree[k<<].v+tree[k<<|].v;
}
void down(int k)
{
    tree[k<<].f+=tree[k].f;
    tree[k<<|].f+=tree[k].f;
    tree[k<<].v+=(tree[k<<].r-tree[k<<].l+)*tree[k].f;
    tree[k<<|].v+=(tree[k<<|].r-tree[k<<|].l+)*tree[k].f;
    tree[k].f=;
}
void change(int k)
{
    if(tree[k].l>=a&&tree[k].r<=b)
    {
        tree[k].v+=(tree[k].r-tree[k].l+)*c;
        tree[k].f+=c;
        return ;
    }
    if(tree[k].f) down(k);
    ;
    );
    |);
    tree[k].v=tree[k<<].v+tree[k<<|].v;
}
void ask(int k)
{
    if(tree[k].l>=a&&tree[k].r<=b)
    {
        ans+=tree[k].v;
        return ;
    }
    if(tree[k].f) down(k);
    ;
    );
    |);
}
int main()
{
    n=read();
    build(,,n);
    Q=read();
    while(Q--)
    {
        p=read(),ans=;
        )
         a=read(),b=read(),c=read(),change();
        else
        {
            a=read(),b=read(),ask();
            printf("%d\n",ans);
        }
    }
    ;
}

0分线段树(全部RE)

将近m^2的做法

我们可以发现m的范围很小,可以支持m^2的操作,我们在每次执行到一个查询操作的时候,枚举在这个操作之前的操作,判断这个操作过的区间是否与我们要查询的区间相交,如果相交的话,我们求出相交的那一部分,左端点为这两段区间左端点的最小值,右端点为这两段区间的最大值,然后我们用这段相交的区间的区间大小*修改的值累加起来即为最终答案

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1010
using namespace std;
int n,m,p;
long long ans;
int read()
{
    ,f=; char ch=getchar();
    ;ch=getchar();}
    +ch-',ch=getchar();
    return x*f;
 }
struct Tree
{
    int l,r,v;
}tree[N];
void ask(int x,int y)
{
    ;i<m;i++)
    {
        if(tree[i].l>y||tree[i].r<x) continue;
        ans+=1ll*(min(tree[i].r,y)-max(tree[i].l,x)+)*tree[i].v;
    }
}
int main()
{
    n=read(),m=read();
    ;i<=m;i++)
    {
        p=read(),ans=;
        )
          tree[i].l=read(),tree[i].r=read(),tree[i].v=read();
        else
        {
            tree[i].l=read(),tree[i].r=read();
            ask(tree[i].l,tree[i].r);
            printf("%lld\n",ans);
        }
    }
    ;
}

洛谷——P2781 传教的更多相关文章

  1. 题解——洛谷P2781 传教(线段树)

    可以说是数据结构学傻了的典型案例了 昨天跳到这题上 然后思考了一下 噫!好!线段树裸题 然后打完板子,发现\(  n \le 10^9 \) 显然线段树直接做不太行 然后这题又只有普及的难度 然后我就 ...

  2. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  3. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  4. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  5. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  6. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  7. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  8. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

  9. 洛谷八月月赛Round1凄惨记

    个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...

随机推荐

  1. JVM垃圾回收原理

    原文地址:http://chenchendefeng.iteye.com/blog/455883 一.相关概念 基本回收算法 1. 引用计数(Reference Counting) 比较古老的回收算法 ...

  2. How to check if Visual Studio 2005 SP1 is installed

    How to check if Visual Studio 2005 SP1 is installed Check the following registry key. HKEY_LOCAL_MAC ...

  3. laravel5.2总结--门面(facades)

    Facades 为应用程序的服务容器中可用的类提供了一个「静态」接口.   Laravel 本身附带许多的 facades,甚至你可能在不知情的状况下已经在使用他们!   xpower的静态接口(门面 ...

  4. 66、fastJson 解析json数据时,如果key值不同怎么处理?

    在某些场景,你可能需要定制序列化输出,比如说,希望序列化采用之后采用"ID",而不是"id",你可以使用@JSONField这个Annotation. publ ...

  5. day02_02.能被3整除的个位数为6的数

    第2题 能被3整除的个位数为6的数 难度增加一点点,再接再厉 注意: 把一些限制条件,用PHP编程的语言来执行 题目:输出100以内(不含100)能被3整除且个位数为6的所有整数 <?php f ...

  6. 数据结构之c++感悟

    #include<iostream.h> 头文件: #include<iostream.h> #define MAX 1024 typedef int Elemtype; ty ...

  7. 【LeetCode】移除元素(Remove Element)

    这道题是LeetCode里的第27道题. 题目描述: 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原 ...

  8. HDU 5289 Assignment(二分+RMQ-ST)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  9. [SCOI2007][bzoj1070] 修车 [费用流]

    题面 传送门 思路 我们考虑某个工人修车的从前到后序列如下: ${W_1,W_2,W_3,...,W_n}$ 那么,对于这n辆车的车主而言,他们等候的总时间为: $\sum_{i=1}^{n}W_i\ ...

  10. 个人环境搭建——搭建JDK环境

    搭建JDK环境 开始之初先提醒两点: ①java是在bash环境下面的,虽然我也在.cshrc下面添加了环境变量,好像有点问题,需要继续改进: ②查看linux版本信息命令:cat /etc/issu ...