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 ...
随机推荐
- c++的最小整数和最大整数
#include<iostream> #include<cmath> using namespace std; int main() { //int -2147483648~2 ...
- 织梦CMS博客风格模板
织梦CMS博客风格模板,织梦CMS,博客模板,CMS模板.程序模板. 模板地址:http://www.huiyi8.com/sc/7248.html
- OpenCV——PS 滤镜算法之平面坐标到极坐标的变换
// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...
- osx快捷键表示图
- Virtual Codeforces Round #392 (Div. 2)
下午闲来无事开了一场Virtual participation 2h就过了3道水题...又跪了..这只是Div. 2啊!!! 感觉这次直接就是跪在了读题上,T1,T2读题太慢,T3还把题读错了 要是让 ...
- python爬虫知识点总结(十)分析Ajax请求并抓取今日头条街拍美图
一.流程框架
- bzoj 3456 城市规划 —— 分治FFT / 多项式求逆 / 指数型生成函数(多项式求ln)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3456 首先考虑DP做法,正难则反,考虑所有情况减去不连通的情况: 而不连通的情况就是那个经典 ...
- VS2005打开VS2008项目的2种方法
vs2008支持.net3.5,而vs2005支持.net2.0,所以使用vs2005打开vs2008的项目,要确定你的项目是.net2.0的. 下面介绍2种方法: 方法1:用记事本打开.sln文件, ...
- 使用gdb调试c程序莫名退出定位 exit 函数
gdb 程序名称 b exit //设置exit函数断点 run //运行程序 bt //查看程序调用堆栈,定位到exit所在行
- Django 框架
MVC 框架和MTV框架 (了解即可) MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...