51nod1394 差和问题 值域线段树
水题.....
插入一个值$v$时,对于$[0, v - 1]$和$[v + 1, inf]$的点分别考虑就行了
删除相当于减去插入的贡献
用动态开点线段树卡点常数就过去了
复杂度$O(n \log n)$
- #include <cstdio>
- #include <cstring>
- using namespace std;
- extern inline char gc() {
- static char RR[], *S = RR + , *T = RR + ;
- if(S == T) fread(RR, , , stdin), S = RR;
- return *S ++;
- }
- inline int read() {
- int p = , w = ; char c = gc();
- while(c > '' || c < '') { if(c == '-') w = -; c = gc(); }
- while(c >= ''&& c <= '') p = p * + c - '', c = gc();
- return p * w;
- }
- int wr[], rw;
- #define pc(o) *O ++ = o
- char WR[], *O = WR;
- template <typename re>
- inline void write(re x) {
- if(!x) pc('');
- if(x < ) x = -x, pc('-');
- while(x) wr[++ rw] = x % , x /= ;
- while(rw) pc(wr[rw --] + ''); pc('\n');
- }
- #define ll long long
- #define ri register int
- #define sid 5000050
- ll ans;
- ll sum[sid];
- int n, q, id, rt;
- int sz[sid], ls[sid], rs[sid];
- const int inf = 1e9 + ;
- inline void upd(int o) {
- sz[o] = sz[ls[o]] + sz[rs[o]];
- sum[o] = sum[ls[o]] + sum[rs[o]];
- }
- inline void ins(int &o, int l, int r, int p, int v) {
- if(!o) o = ++ id;
- if(l == r) { sz[o] += v; sum[o] = 1ll * sz[o] * p; return; }
- int mid = (l + r) >> ;
- if(p <= mid) ins(ls[o], l, mid, p, v);
- else ins(rs[o], mid + , r, p, v);
- upd(o);
- }
- inline ll qry(int o, int l, int r, int ml, int mr) {
- if(!o || ml > r || mr < l) return ;
- if(ml <= l && mr >= r) return sum[o];
- int mid = (l + r) >> ;
- return qry(ls[o], l, mid, ml, mr) + qry(rs[o], mid + , r, ml, mr);
- }
- inline int qsz(int o, int l, int r, int ml, int mr) {
- if(!o || ml > r || mr < l) return ;
- if(ml <= l && mr >= r) return sz[o];
- int mid = (l + r) >> ;
- return qsz(ls[o], l, mid, ml, mr) + qsz(rs[o], mid + , r, ml, mr);
- }
- inline void ins(int v, int opt) {
- if(opt == - && qsz(rt, , inf, v, v) == ) { write(-); return; }
- ins(rt, , inf, v, opt);
- ans += opt * (-qry(rt, , inf, , v - ) + 1ll * qsz(rt, , inf, , v - ) * v);
- ans += opt * (qry(rt, , inf, v + , inf) - 1ll * qsz(rt, , inf, v + , inf) * v);
- }
- int main() {
- n = read(); q = read();
- for(ri i = ; i <= n; i ++) ins(read(), );
- for(ri i = ; i <= q; i ++) {
- int opt = read();
- if(opt == ) ins(read(), );
- else if(opt == ) ins(read(), -);
- else write(ans);
- }
- fwrite(WR, , O - WR, stdout);
- return ;
- }
51nod1394 差和问题 值域线段树的更多相关文章
- BZOJ 3218(a + b Problem-二分图套值域线段树)
出这题的人是怎么想出来的…… 言归正传,这题是二分图套值域线段树. 首先经过 @Vfleaking的神奇建图后,把图拆成二分图, 不妨利用有向图最小割的性质建图(以前我一直以为最小割和边的方向无关,可 ...
- [BZOJ3065]带插入区间K小值 解题报告 替罪羊树+值域线段树
刚了一天的题终于切掉了,数据结构题的代码真**难调,这是我做过的第一道树套树题,做完后感觉对树套树都有阴影了......下面写一下做题记录. Portal Gun:[BZOJ3065]带插入区间k小值 ...
- 值域线段树 bzoj 4627
这是题目链接4627: [BeiJing2016]回转寿司 题目大意: 给定n个数,求有多少个字段和在 满足 L<=sum<=R; 解题思路 需要解这个题目,需要有线段树加可持续化的思想, ...
- Permutation UVA - 11525(值域树状数组,树状数组区间第k大(离线),log方,log)(值域线段树第k大)
Permutation UVA - 11525 看康托展开 题目给出的式子(n=s[1]*(k-1)!+s[2]*(k-2)!+...+s[k]*0!)非常像逆康托展开(将n个数的所有排列按字典序排序 ...
- bzoj 4627 值域线段树
4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 523 Solved: 227[Submit][Sta ...
- 值域线段树 (玲珑OJ 1117)
点击打开题目链接 题目意思很简单: 1.插入x 2.把小于x的数变成x 3.把大于x的数变成x 4.求集合中第x小数 5.求集合中小于x的数个数 思路: 线段树,节点是值的分数,你可以离散,也可以不离 ...
- 牛客OI周赛10-提高组:B-Taeyeon的困惑(值域线段树)
做法 单点加单点删,在值域线段树上直接二分就能求值前\(K\)小的和 Code #include<bits/stdc++.h> typedef long long LL; const LL ...
- 线段树 by yyb
线段树 by yyb Type1 维护特殊信息 1.[洛谷1438]无聊的数列 维护一个数列,两种操作 1.给一段区间加上一个等差数列 2.单点询问值 维护等差数列 不难发现,等差数列可以写成\(ad ...
- BZOJ.5110.[CodePlus2017]Yazid 的新生舞会(线段树/树状数组/分治)
LOJ BZOJ 洛谷 又来发良心题解啦 \(Description\) 给定一个序列\(A_i\).求有多少个子区间,满足该区间众数出现次数大于区间长度的一半. \(n\leq5\times10^5 ...
随机推荐
- 【计蒜客】是男人就过 8 题--Pony.AI 题 A. A String Game 后缀自动机+SG函数
[题目]A. A String Game [题意]给定目标串S和n个子串Ti,Alice和Bob轮流选择一个子串操作,必须且只能在子串末尾添加一个字符使得新串也是S的子串,不能操作即输,求胜利者.|S ...
- php通过composer添加一个包以后,无法通过git将这个包的代码文件提交上去
实际上是因为 vender 包中包含 有.git 文件,是composer 下载时下载了 该项目的github源码. 就是参数 源码优先 --prefer-source composer update ...
- VC拷贝字符串到剪切板
] ="中华人民共和国"; DWORD dwLength = ; // 要复制的字串长度 HANDLE hGlobalMemory = GlobalAlloc(GHND, dwLe ...
- var_dump打印出来格式太乱 怎么调
var_dump()和print_r() 输出的都是文本格式,在浏览器中就是这样如果你加载了 xdebug 扩展,那么 var_dump() 就会以 html 格式输出
- 初识PDO数据库抽象层
目录: 00x1 php中的pdo是什么? 00x2 pdo创建一个PDO对象 00x1 php中的pdo是什么? 就是操作数据库的方法,pdo就是把操作数据库的函数封装成一个pdo类,其间做了安全验 ...
- nvidia tx1使用记录--基本环境搭建
前言 之前有专门写过一篇nvidia tk1使用记录--基本环境搭建,本以为自己有过tk1的经验后,在tx1上搭建和它一样的环境会轻车熟路,结果却是在nvidia tx1上花的时间居然比tk1还多.我 ...
- 91.Decode Ways---dp
题目链接:https://leetcode.com/problems/decode-ways/description/ 题目大意:将给出的字符串解码,问有多少种解码方式.解码按照“ABC...Z&qu ...
- python RSA加密解密及模拟登录cnblog
1.公开密钥加密 又称非对称加密,需要一对密钥,一个是私人密钥,另一个则是公开密钥.公钥加密的只能私钥解密,用于加密客户上传数据.私钥加密的数据,公钥可以解密,主要用于数字签名.详细介绍可参见维基百科 ...
- geoserver-manager发布style失败
当参数给定没有错误时,最有可能的原因就是: sld文件格式应该以UTF-8无BOM格式编码(自己生成的sld文件多数情况下是以UTF-8格式编码).
- LFM隐语义模型Latent Factor Model
实际应用 LFM 模型在实际使用中有一个困难,就是很难实现实时推荐.经典的 LFM 模型每次训练都需要扫描所有的用户行为记录,并且需要在用户行为记录上反复迭代来优化参数,所以每次训练都很耗时,实际应用 ...