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. LA_3942 LA_4670 从字典树到AC自动机

    首先看第一题,一道DP+字典树的题目,具体中文题意和题解见训练指南209页. 初看这题模型还很难想,看过蓝书提示之后发现,这实际上是一个标准DP题目:通过数组来储存后缀节点的出现次数.也就是用一颗字典 ...

  2. GIt-恢复进度

    继续暂存区未完成的实践 经过了前面的实践,现在DEMO版本库应该处于master分支上,看看是不是这样. $ cd /path/to/my/workspace/demo $ git status -s ...

  3. jni 调用

    Event 0 on null Unexpected event 0 on /storage/emulated/0/Books/null

  4. TCP/IP网络编程之基于UDP的服务端/客户端

    理解UDP 在之前学习TCP的过程中,我们还了解了TCP/IP协议栈.在四层TCP/IP模型中,传输层分为TCP和UDP这两种.数据交换过程可以分为通过TCP套接字完成的TCP方式和通过UDP套接字完 ...

  5. java多线程的常用方法

    介绍一些多线程中的常用方法: //启动方法 a.start(); //返回代码正在被哪个线程调用的信息 a.currentThread(); //返回线程的名字 a.currentThread().g ...

  6. bash shell命令与监测的那点事(三)

    bash shell命令与监测的那点事之df与du 前两篇介绍了bash shell的进程监控指令,但是有时候你需要知道在某个设备上还有多少磁盘空间.首先介绍df命令: df命令 df命令就是用来轻松 ...

  7. Robotium接入到Jenkins持续集成自动化测试

    6.3 将测试用例接入到Jenkins 由于我是自己学习的手机自动化测试,没有实际投入到工作中使用,jenkins的接入也没有具体操作,现摘抄一下网页:http://www.tuicool.com/a ...

  8. jmeter连接数据库之增删改查

    配置jdbc: 查询sql配置: 插入sql配置: 修改sql配置: 删除sql配置:

  9. 获取完整的URL request.getQueryString()

    public String codeToString(String str) { String strString = str; try { byte tempB[] = strString.getB ...

  10. sql执行效率 Explain

    explain+sql语句 explain返回的结果项很多,这里我们只关注三种,分别是type,key,rows. key:显示MySQL实际决定使用的键(索引).如果没有选择索引,键是NULL. r ...