D-温暖的签到题
链接:https://ac.nowcoder.com/acm/contest/892/D
题意:
思路:
线段树
比赛时思路对的,但是代码写的太乱,没改出来,赛后重写。
Lazy我开二维数组,记录子节点左右对应的范围。
其他的就根普通线段树一样。
代码:
#include <bits/stdc++.h>
using namespace std; typedef long long LL;
const int MAXN = 1e5+10; LL Seg[MAXN*4];
LL Lazy[MAXN*4][2];
int n, m; void PushUp(int root)
{
Seg[root] = Seg[root<<1]+Seg[root<<1|1];
} void PushDown(int root)
{
if (Lazy[root][1] != 0)
{
LL lenl = Lazy[root][0];
LL lenr = Lazy[root][1];
LL lenmid = (lenl+lenr)/2;
Seg[root<<1] = (lenl+lenmid)*(lenmid-lenl+1)/2;
Seg[root<<1|1] = (lenmid+1+lenr)*(lenr-lenmid)/2;
Lazy[root<<1][0] = lenl;
Lazy[root<<1][1] = lenmid;
Lazy[root<<1|1][0] = lenmid+1;
Lazy[root<<1|1][1] = lenr;
Lazy[root][0] = Lazy[root][1] = 0;
}
} void Build(int root, int l, int r)
{
if (l == r)
{
Seg[root] = l;
return;
}
int mid = (l+r)/2;
Build(root<<1, l, mid);
Build(root<<1|1, mid+1, r);
PushUp(root);
} void Update(int root, int l, int r, int ql, int qr)
{
if (r < ql || qr < l)
return;
if (ql <= l && r <= qr)
{
LL lenl = l-ql+1, lenr = r-ql+1;
Seg[root] = (lenl+lenr)*(r-l+1)/2;
Lazy[root][0] = lenl;
Lazy[root][1] = lenr;
return;
}
PushDown(root);
int mid = (l+r)/2;
Update(root<<1, l, mid, ql, qr);
Update(root<<1|1, mid+1, r, ql, qr);
PushUp(root);
} LL Query(int root, int l, int r, int ql, int qr)
{
if (r < ql || qr < l)
return 0LL;
if (ql <= l && r <= qr)
return Seg[root];
PushDown(root);
LL res = 0;
int mid = (l+r)/2;
res += Query(root<<1, l, mid, ql, qr);
res += Query(root<<1|1, mid+1, r, ql, qr);
return res;
} int main()
{
int op, l, r;
cin >> n >> m;
Build(1, 1, n);
while (m--)
{
cin >> op >> l >> r;
if (op == 1)
Update(1, 1, n, l, r);
else
cout << Query(1, 1, n, l, r) << endl;
} return 0;
}
D-温暖的签到题的更多相关文章
- 【西北大学集训队选拔赛】D温暖的签到题(自创数据结构)
题目链接 #include <bits/stdc++.h> #define NUM #define ll long long using namespace std; int n, m; ...
- A 洛谷 P3601 签到题 [欧拉函数 质因子分解]
题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...
- fjwc2019 D3T1 签到题 (贪心)
#184. 「2019冬令营提高组」签到题 每次询问接近O(1).......考虑贪心 怎么贪心呢? 对于相邻的两个数,我们要保证异或x后单调不降 我们找到两个数二进制上最高的相异位 当左边的数相异位 ...
- CTF-练习平台-WEB之 签到题
一.签到题 根据提示直接加群在群公告里就能找到~
- 洛谷P3601签到题(欧拉函数)
题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...
- 【洛谷九月月赛T1】签到题(bsgs)(快速乘)
说好的签到题呢qwq....怎么我签到题都不会啊qwq 之后看了bsgs才发现貌似不是那么那么难fake!!什么东西... 先贴上部分分做法(也就是枚举1的个数,然后每一步都进行取模(这和最后取模结果 ...
- WEB新手之签到题
写一写web新手赛的题. 这是签到题,开始时需要耐心等待页面中字母全部出现. 字母全部出现后,会跳转到另一个界面,如上图所示.F12没什么特别的地方,这题应该有点难度. 按往常一样,先抓包. 按英文提 ...
- EOJ Monthly 2019.1 唐纳德先生与这真的是签到题吗 【数学+暴力+multiset】
传送门:https://acm.ecnu.edu.cn/contest/126/ C. 唐纳德先生与这真的是签到题吗 单测试点时限: 6.0 秒 内存限制: 1024 MB 唐纳德先生在出月赛的过程中 ...
- HLJU 1221: 高考签到题 (三分求极值)
1221: 高考签到题 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 9 Solved: 4 [Submit][id=1221">St ...
- Different Integers 牛客多校第一场只会签到题
Given a sequence of integers a1, a2, ..., an and q pairs of integers (l1, r1), (l2, r2), ..., (lq, r ...
随机推荐
- deepin 安装微信与QQ
安装QQ sudo apt-get install deepin.com.qq.im 安装微信 sudo apt-get install deepin.com.wechat 附录 其他安装包 http ...
- Hive- Hive Web Interface
当我们安装好hive时候,我们启动hive的UI界面的时候,命令: hive –-service hwi ,报错,没有war包 我们查看hive/conf/hive-default.xml.templ ...
- python读写txt大文件
直接上代码: import easygui import os path = easygui.fileopenbox()#path是打开的文件的全路径 if path:#如果选择打开文件,没有选择取消 ...
- navicat for mysql 安装
直接上正题,用于记录 1.下载linux版本的navicat:http://www.navicat.com/download/navicat-for-mysql 2.解压 tar -vzxf navi ...
- [原创]java在线打开PDF文档
步骤一:(涉及到的工具) 访问:http://www.zhuozhengsoft.com/dowm/,从官网下载PageOffice for Java. 步骤二:(配置工程) 1. 解压PageOff ...
- Linux_学习_01_常用命令大全
一.文件目录 1.列出目录 ls -a #显示隐藏文件 -l #显示文件和目录的详细资料 -h -lrt tree #显示文件和目录由根目录开始的树形结构 lstree #显示文件和目录由根目录开始的 ...
- usg6500
- 取分组TOPN好理解案例
- P2762 [网络流24题]太空飞行计划问题(最小割)
地址 最大权闭合子图裸题,不说了吧,求方案就是把s集遍历一遍. 错误记录:dfs那块忘判断残量了,11分×1. #include<cstdio> #include<iostream& ...
- django orm 操作符
__gt 大于__gte 大于等于__lt 小于__lte 小于等于__in__exact 精确等于 like 'aaa'__iexact 精确等于 忽略大小写 ilike 'aaa'__contai ...