Codeforces 1139F Dish Shopping 树状数组套平衡树 || 平衡树

Dish Shopping

将每个物品拆成p 和 s 再加上人排序。 然后问题就变成了, 对于一个线段(L - R),

问有多少个(li, ri)满足  L >= li && R >= ri, 这个东西可以直接树状数组套平衡树维护。

但是这个题目有个特殊性,因为排好序之后不会存在 li > L && ri > R的点, 所以可以直接

用平衡树, 或者线段树去维护这个东西。

 

平板电视

#include<bits/stdc++.h>
#include <bits/extc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long longusing namespace std;
using namespace __gnu_pbds;const int N = 1e5 + 7;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 998244353;
const double eps = 1e-6;
const double PI = acos(-1);int n, m, tot, ans[N * 3], hs[N], cnt;
int p[N], s[N], b[N], inc[N], pref[N];struct event {int p, b, id, op, rp;bool operator < (const event& rhs) const {if(p == rhs.p) return op < rhs.op;else return p < rhs.p;}
} e[N * 3];template <class T>
using Tree = tree<T, null_type, std::less<T>, rb_tree_tag,tree_order_statistics_node_update>;struct Bit {Tree<PII> T[N];void add(int x, PII v) {for(int i = x; i <= cnt; i += i & -i)T[i].insert(v);}void del(int x, PII v) {for(int i = x; i <= cnt; i += i & -i)T[i].erase(v);}int sum(int x, int R) {int ans = 0;for(int i = x; i; i -= i & -i)ans += T[i].order_of_key(mk(R, INT_MAX));return ans;}
} bit;int getPos(int x) {return upper_bound(hs + 1, hs + 1 + cnt, x) - hs - 1;
}int main() {scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++) scanf("%d", &p[i]);for(int i = 1; i <= n; i++) scanf("%d", &s[i]);for(int i = 1; i <= n; i++) scanf("%d", &b[i]);for(int i = 1; i <= n; i++) {e[++tot] = event{p[i], b[i], i, 0, p[i]};e[++tot] = event{s[i], b[i], i, 2, p[i]};hs[++cnt] = p[i] - b[i];}for(int i = 1; i <= m; i++) scanf("%d", &inc[i]);for(int i = 1; i <= m; i++) scanf("%d", &pref[i]);for(int i = 1; i <= m; i++) e[++tot] = event{inc[i], pref[i], n + i, 1, 0};sort(hs + 1, hs + 1 + cnt);cnt = unique(hs + 1, hs + 1 + cnt) - hs - 1;sort(e + 1, e + 1 + tot);for(int i = 1; i <= tot; i++) {int p = e[i].p, b = e[i].b, rp = e[i].rp;if(e[i].op == 0) {bit.add(getPos(rp - b), mk(rp + b, e[i].id));} else if(e[i].op == 1) {ans[e[i].id] = bit.sum(getPos(p - b), p + b);} else {bit.del(getPos(rp - b), mk(rp + b, e[i].id));}}for(int i = n + 1; i <= n + m; i++) printf("%d ", ans[i]);puts("");return 0;}/*
*/
View Code

 

treap, 为啥我的treap好慢啊啊啊。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long longusing namespace std;const int N = 1e5 + 7;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 998244353;
const double eps = 1e-6;
const double PI = acos(-1);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());int n, m, tot, ans[N * 3], hs[N], cnt;
int p[N], s[N], b[N], inc[N], pref[N];struct event {int p, b, id, op, rp;bool operator < (const event& rhs) const {if(p == rhs.p) return op < rhs.op;else return p < rhs.p;}
} e[N * 3];struct node {node* ch[2];int key, fix, sz, cnt;void update() {sz = ch[0]->sz + ch[1]->sz + cnt;}
} base[N * 20];typedef node* P_node;
P_node len = base;struct Treap {node nil;P_node root, null;Treap() {root = null = &nil;null->key = null->fix = inf;null->sz = null->cnt = 0;null->ch[0] = null->ch[1] = null;}P_node newnode(int tkey) {len->key = tkey;len->fix = rng();len->ch[0] = len->ch[1] = null;len->sz = len->cnt = 1;return len++;}void rot(P_node &p, int d) {P_node k = p->ch[d ^ 1];p->ch[d ^ 1] = k->ch[d];k->ch[d] = p;p->update();k->update();p = k;}void _Insert(P_node &p, int tkey) {if(p == null) {p = newnode(tkey);} else if(p->key == tkey) {p->cnt++;} else {int d = tkey > p->key;_Insert(p->ch[d], tkey);if(p->ch[d]->fix > p->fix) {rot(p, d ^ 1);}}p->update();}void _Delete(P_node &p, int tkey) {if(p == null) return;if(p->key == tkey) {if(p->cnt > 1) p->cnt--;else if(p->ch[0] == null) p = p->ch[1];else if(p->ch[1] == null) p = p->ch[0];else {int d = p->ch[0]->fix > p->ch[1]->fix;rot(p, d);_Delete(p->ch[d], tkey);}} else {_Delete(p->ch[tkey > p->key], tkey);}p->update();}int _Kth(P_node p, int k) {if(p == null || k < 1 || k > p->sz) return 0;if(k < p->ch[0]->sz + 1) return _Kth(p->ch[0], k);if(k > p->ch[0]->sz + p->cnt) return _Kth(p->ch[1], k - p->ch[0]->sz - p->cnt);return p->key;}int _Rank(P_node p, int tkey, int res) {if(p == null) return -1;if(p->key == tkey) return p->ch[0]->sz + res + 1;if(tkey < p->key) return _Rank(p->ch[0], tkey, res);return _Rank(p->ch[1], tkey, res + p->ch[0]->sz + p->cnt);}int _Pred(P_node p, int tkey){if(p == null) return -inf;if(tkey <= p->key) return _Pred(p->ch[0], tkey);return max(p->key, _Pred(p->ch[1], tkey));}int _Succ(P_node p, int tkey){if(p == null) return inf;if(tkey >= p->key) return _Succ(p->ch[1], tkey);return min(p->key, _Succ(p->ch[0], tkey));}int _Query(P_node p, int tkey) {if(p == null) return 0;if(p->key > tkey) return _Query(p->ch[0], tkey);else if(p->key < tkey) return p->cnt + p->ch[0]->sz + _Query(p->ch[1], tkey);else return p->cnt + p->ch[0]->sz;}void Insert(int tkey){ _Insert(root,tkey); }void Delete(int tkey){ _Delete(root,tkey); }int Kth(int k){ return _Kth(root,k); }int Rank(int tkey){ return _Rank(root,tkey,0); }int Pred(int tkey){ return _Pred(root,tkey); }int Succ(int tkey){ return _Succ(root,tkey); }int Query(int tkey){ return _Query(root, tkey); }
}tp;struct Bit {Treap T[N];void add(int x, int v) {for(int i = x; i <= cnt; i += i & -i)T[i].Insert(v);}void del(int x, int v) {for(int i = x; i <= cnt; i += i & -i)T[i].Delete(v);}int sum(int x, int R) {int ans = 0;for(int i = x; i; i -= i & -i)ans += T[i].Query(R);return ans;}
} bit;int getPos(int x) {return upper_bound(hs + 1, hs + 1 + cnt, x) - hs - 1;
}int main() {srand(time(NULL));scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++) scanf("%d", &p[i]);for(int i = 1; i <= n; i++) scanf("%d", &s[i]);for(int i = 1; i <= n; i++) scanf("%d", &b[i]);for(int i = 1; i <= n; i++) {e[++tot] = event{p[i], b[i], i, 0, p[i]};e[++tot] = event{s[i], b[i], i, 2, p[i]};hs[++cnt] = p[i] - b[i];}for(int i = 1; i <= m; i++) scanf("%d", &inc[i]);for(int i = 1; i <= m; i++) scanf("%d", &pref[i]);for(int i = 1; i <= m; i++) e[++tot] = event{inc[i], pref[i], n + i, 1, 0};sort(hs + 1, hs + 1 + cnt);cnt = unique(hs + 1, hs + 1 + cnt) - hs - 1;sort(e + 1, e + 1 + tot);for(int i = 1; i <= tot; i++) {int p = e[i].p, b = e[i].b, rp = e[i].rp;if(e[i].op == 0) {bit.add(getPos(rp - b), rp + b);} else if(e[i].op == 1) {ans[e[i].id] = bit.sum(getPos(p - b), p + b);} else {bit.del(getPos(rp - b), rp + b);}}for(int i = n + 1; i <= n + m; i++) printf("%d ", ans[i]);puts("");return 0;}/*
*/
View Code

 

转载于:https://www.cnblogs.com/CJLHY/p/10612071.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客16494 生活大爆炸版石头剪刀布

题目描述 石头剪刀布是常见的猜拳游戏&#xff1a;石头胜剪刀&#xff0c;剪刀胜布&#xff0c;布胜石头。如果两个人出拳一样&#xff0c;则不分胜负。在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。升级版游戏在传统的石头剪刀布游戏的基础上&#xff0c;…

codeforces 1073E

题解&#xff1a; 考虑数位DP,状压出现过的数字集合S&#xff0c;f ( l , x , S , pz , lim )表示到第 l 位&#xff0c;数字为x&#xff0c; 数字集合为S &#xff0c;是否为前导0&#xff0c;是否贴上界 然后同时定义g为该状态下的数字和&#xff0c;利用 10^(l-1) * f(l , x…

时空AI技术:深度强化学习在智能城市领域应时空AI技术:深度强化学习在智能城市领域应用介绍...

来源&#xff1a;海豚数据科学实验室作者&#xff1a;京东科技 时空AI团队深度强化学习是近年来热起来的一项技术。深度强化学习的控制与决策流程必须包含状态&#xff0c;动作&#xff0c;奖励是三要素。在建模过程中&#xff0c;智能体根据环境的当前状态信息输出动作作用于环…

牛客16500 珠心算测试

题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练&#xff0c;既能够开发智力&#xff0c;又能够为日常生活带来很多便利&#xff0c;因而在很多学校得到普及。 某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成…

读书笔记007:《伤寒论》- 手少阴心经

手少阴脉起心中&#xff0c;下膈直与小肠通&#xff0c;支者还从肺系走&#xff0c;直上喉咙系目瞳。直者上肺出腋下&#xff0c;臑后肘内少海从&#xff0c;臂内后廉抵掌中&#xff0c;锐骨之端注少冲。多气少血属此经&#xff0c;是动心脾痛难任&#xff0c;渴欲饮水咽干燥&a…

牛客16585 统计单词数

题目描述 一般的文本编辑器都有查找单词的功能&#xff0c;该功能可以快速定位特定单词在文章中的位置&#xff0c;有的还能统计出特定单词在文章中出现的次数。 现在&#xff0c;请你编程实现这一功能&#xff0c;具体要求是&#xff1a;给定一个单词&#xff0c;请你输出它在…

牛客21312 神秘餐馆

题目描述 一家神秘餐馆准备开放N天&#xff0c;牛牛 和 牛妹听到这个消息后&#xff0c;准备尽可能多的一起去吃午饭 餐馆有M道菜&#xff0c;牛牛和牛妹每次来只允许点一道菜&#xff0c;如果在第i天买了第j道菜 那么第i7天也只能买第j道菜 第i天第j道菜的价格为price[i][j] …

牛客21297 手机号码

题目描述 给你一个整数n表示手机号码的位数 再给你m个字符串表示保留的号码,比如911 110 120等 问你一共有多少的手机号码不以保留号码开头 n, m map(int, input().split()) s [] for _ in range(m):s.append(input())sum pow(10, n) num 0for i in range(m):flag Falsefo…

牛客16785 Cantor表

先找到第N个数在第几行第几列&#xff0c;然后根据规律进行计算 N int(input())t 1 while N-t > 0:N N-tt 1if t%2 0:print("%d/%d"%(N,t-N1)) else:print("%d/%d"%(t-N1,N))

Echarts富文本rich及格式化工具formatter的使用

Echarts官网上说&#xff0c;ECharts&#xff0c;一个使用 JavaScript 实现的开源可视化库&#xff0c;可以流畅的运行在 PC 和移动设备上&#xff0c;兼容当前绝大部分浏览器&#xff08;IE8/9/10/11&#xff0c;Chrome&#xff0c;Firefox&#xff0c;Safari等&#xff09;&a…

国拨经费约31.48亿!科技部发布科技创新2030 —“脑科学与类脑研究”重大项目2021年度项目申报指南...

来源&#xff1a;科技部科技部关于发布科技创新 2030 —“脑科学与类脑研究”重大项目 2021年度项目申报指南的通知国科发资〔2021〕265号各省、自治区、直辖市及计划单列市科技厅&#xff08;委、局&#xff09;&#xff0c;新疆生产建设兵团科技局&#xff0c;国务院各有关部…

牛客16662 津津的储蓄计划

题目描述 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱&#xff0c;津津会预算这个月的花销&#xff0c;并且总能做到实际花销和预算的相同。 为了让津津学习如何储蓄&#xff0c;妈妈提出&#xff0c;津津可以随时把整百的钱存在她那里&#xff0c;到了年末她…

Hinton获2021迪克森科学奖:他改变了AI,改变了世界

来源&#xff1a;AI科技评论作者&#xff1a;维克多编辑&#xff1a;青暮据卡内基梅隆大学&#xff08;CMU&#xff09;官方消息&#xff0c;Geoffrey Hinton 获得了2021年的迪克森科学奖&#xff08;The Dickson Prize in Science&#xff09;。此奖项设立于1969年&#xff0c…

牛客21783 牛牛的星际旅行

题目描述 在一个遥远的星球上&#xff0c;每周有N天&#xff0c;牛牛去了这个星球旅游&#xff0c;他恰好只带了N件不同的衣服&#xff0c;编号为1到N 每一天他会穿其中的某一件衣服&#xff0c;一周之内不能穿同一件衣服两次&#xff0c;而且假如某件衣服是在第x天穿的&#x…

国拨经费约31.48亿!科技部发布科技创新2030 —“脑科学与类脑研究”重大项目2021年度项目申报指南

来源&#xff1a;科技部科技部关于发布科技创新 2030 —“脑科学与类脑研究”重大项目 2021年度项目申报指南的通知国科发资〔2021〕265号各省、自治区、直辖市及计划单列市科技厅&#xff08;委、局&#xff09;&#xff0c;新疆生产建设兵团科技局&#xff0c;国务院各有关部…

牛客21805 字符串编码与解码

链接&#xff1a;https://ac.nowcoder.com/acm/problem/21805 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld 题目描述 给你两个长度相同的字符串a&#xff…

数学有什么用处?看完后恍然大悟!

来源&#xff1a;算法数学俱乐部编辑&#xff1a;nhyilin高等数学有什么用&#xff1f;很多人问过我这个问题。其实大多数人在问这个问题的时候&#xff0c;心里已经预设了否定的答案。确实&#xff0c;对于大多数人来说&#xff0c;已经发展到了连数字都基本很少用了的一些高等…

牛客16589 机器翻译

链接&#xff1a;https://ac.nowcoder.com/acm/problem/16589 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld 题目描述 小晨的电脑上安装了一个机器翻译软…

2021年传感器行业的机遇与风险 | 深度思考

来源&#xff1a;蓝焱资本2021年已过半&#xff0c;物联网时代已经到来。毫无疑问&#xff0c;万物联网的背后是万物数字化&#xff0c;而数字化万物的核心就是传感器。传感器这个概念虽然已经存在多年&#xff0c;但它依旧是个活力无限的领域。随着物联网概念的火热&#xff0…

牛客16654 谁拿了最多奖学金

链接&#xff1a;https://ac.nowcoder.com/acm/problem/16654 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld 题目描述 某校的惯例是在每学期的期末考试之…