CF543E Listening to Music
题面
空间只有$64\text{MB}$!!!
题解
(据说正解是毒瘤分块套分块)
按照权值从大到小排序,对所有能够覆盖到它的区间的左端点打个标记
按照值域建一棵主席树就可以了
区间查询最大值,用$m$减去它即可
如何卡空间???
- 用位域将主席树的节点信息压到一个
unsigned long long中 - 将叶节点改成一个值,节省空间。
(但是还是要开40倍) - 永久化的标记和值压在一起。
最后以大约$63\text{MB}$的空间卡了过去。
代码
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define RG register
#define file(x) freopen(#x".in", "r", stdin);freopen(#x".out", "w", stdout);
#define clear(x, y) memset(x, y, sizeof(x))
inline int read()
{
int data = 0, w = 1; char ch = getchar();
while(ch != '-' && (!isdigit(ch))) ch = getchar();
if(ch == '-') w = -1, ch = getchar();
while(isdigit(ch)) data = data * 10 + (ch ^ 48), ch = getchar();
return data * w;
}
const int maxn(2e5 + 10), INT_MAX(1e9);
#define lmax (l == mid ? int(t[rt].lson) : int(t[t[rt].lson].max))
#define rmax (mid + 1 == r ? int(t[rt].rson) : int(t[t[rt].rson].max))
struct node { unsigned long long max : 18, lson : 23, rson : 23; } t[maxn * 40];
int cur, root[maxn], n, m, Q;
std::pair<int, int> a[maxn];
int Insert(int p, int l, int r, int ql, int qr)
{
if(l == r) return p + 1;
int rt = ++cur; t[rt] = t[p];
if(ql <= l && r <= qr) return ++t[rt].max, rt;
int mid = (l + r) >> 1, tag = t[rt].max - std::max(lmax, rmax);
if(ql <= mid) t[rt].lson = Insert(t[p].lson, l, mid, ql, qr);
if(qr > mid) t[rt].rson = Insert(t[p].rson, mid + 1, r, ql, qr);
t[rt].max = std::max(lmax, rmax) + tag; return rt;
}
int query(int rt, int l, int r, int ql, int qr)
{
if(l == r) return rt;
if(ql <= l && r <= qr) return t[rt].max;
int mid = (l + r) >> 1, ans = 0, tag = t[rt].max - std::max(lmax, rmax);
if(ql <= mid) ans = std::max(ans, query(t[rt].lson, l, mid, ql, qr));
if(qr > mid) ans = std::max(ans, query(t[rt].rson, mid + 1, r, ql, qr));
return ans + tag;
}
int main()
{
#ifndef ONLINE_JUDGE
file(cpp);
#endif
n = read(), m = read();
for(RG int i = 1; i <= n; i++) a[i] = std::make_pair(-read(), i);
std::sort(a + 1, a + n + 1);
for(RG int i = 1; i <= n; i++)
{
int ql = std::max(1, a[i].second - m + 1);
int qr = std::min(a[i].second, n - m + 1);
root[i] = Insert(root[i - 1], 1, n - m + 1, ql, qr);
}
Q = read(); int ans = 0;
while(Q--)
{
int l = read(), r = read(), x = read() ^ ans;
int id = std::upper_bound(a + 1, a + n + 1,
std::make_pair(-x, INT_MAX)) - a - 1;
printf("%d\n", ans = m - query(root[id], 1, n - m + 1, l, r));
}
return 0;
}
CF543E Listening to Music的更多相关文章
- 【CF543E】Listening to Music
[CF543E]Listening to Music 题面 洛谷 题目大意 给你一个长度为\(n\)序列\(a_i\),和一个常数\(m\),定义一个函数\(f(l,x)\)为\([l,l+m-1]\ ...
- [WPF系列]基础 Listening to Dependency Property change notifications of a given Element
I want to share this great post from Anoop that shows a easy way to add a notification system to dep ...
- [BEC][hujiang] Lesson03 Unit1:Working life ---Grammar & Listening & Vocabulary
3 Working life p8 Grammar Gerund and infinitive(动名词和不定式) 一般而言: 1 动词后面接动名词还是不定式没有特定规则,主要取决于语言习 ...
- 错误信息:A TCP error (10013: 以一种访问权限不允许的方式做了一个访问套接字的尝试。) occurred while listening on IP Endpoint=192.168.1.18:8002.
百度之后,知道这个原因是端口已经被其他进程打开了 使用cmd命令,查看8002端口被哪一个程序占用了 C:\Windows\System32>netstat -ano | find " ...
- 启动redis出现Creating Server TCP listening socket *:6379: bind: No such file or directory
E:\redis>redis-server.exe redis.windows.conf [8564] 10 Oct 20:00:36.745 # Creating Server TCP lis ...
- ERROR: unable to bind listening socket for address ’127
ERROR: unable to bind listening socket for address '127.0.0.1:9000′ 解决办法: killall php-fpm 然后重启即可. 我的 ...
- creating server tcp listening socket 127.0.0.1:6379: bind No error
参考链接:https://blog.csdn.net/n_fly/article/details/52692480 1.window10环境下面安装的redis,之前安装好弄了一下,过了好几天,再次使 ...
- 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use
在启动redis时报错 # Creating Server TCP listening socket *:6379: bind: Address already in use 错误原因 6379地址已 ...
- redis启动出现错误creating server tcp listening socket 127.0.0.1:6379: bind No error
creating server tcp listening socket 127.0.0.1:6379: bind No error 的解决方案如下按顺序输入如下命令就可以连接成功 1. redis- ...
随机推荐
- Redis命令、数据结构场景、配置文件总结
本文大纲 一.常用数据类型简介二.redis操作命令三.redis配置文件详解四.redis数据类型使用场景 一.常用数据类型简介 redis常用五种数据类型:string,hash,list,set ...
- BZOJ4321:queue2(DP)
Description n 个沙茶,被编号 1~n.排完队之后,每个沙茶希望,自己的相邻的两人只要无一个人的编号和自己的编号相差为 1(+1 或-1)就行.现在想知道,存在多少方案满足沙茶们如此不苛刻 ...
- 【[国家集训队]Crash的数字表格 / JZPTAB】
这道题我们要求的是 \[\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)\] 总所周知\(lcm\)的性质不如\(gcd\)优雅,但是唯一分解定理告诉我们\(gcd(i,j)\time ...
- 基于cookie和session的登录验证
settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions ...
- Python3安装scrapy框架步骤
Python3安装scrapy框架步骤 1. 安装wheel a) Pip install wheel 2. 安装lxml Pip install lxml 3. ...
- 给trac的ticket添加提交时字段验证
我们在项目管理中使用了trac系统,并且对于ticket添加了以下自定义字段并且对它们的格式都有一定要求: svn版本号:格式为 r1234.多个版本号之间使用半角逗号隔开.如:r1234,r5678 ...
- java 静态相关内容
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码 ...
- PAT——1060. 爱丁顿数
英国天文学家爱丁顿很喜欢骑车.据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数”E,即满足有E天骑车超过E英里的最大整数E.据说爱丁顿自己的E等于87. 现给定某人N天的骑车距离,请你算出对应的爱 ...
- vue02—— 动画、组件、组件之间的数据通信
一.vue中使用动画 文档:https://cn.vuejs.org/v2/guide/transitions.html 1. Vue 中的过渡动画 <!DOCTYPE html> < ...
- 【问题解决】增加https后 phpcms 分页错误
https://m.cnbuses.com/m.cnbuses.com/index.php?page=2查看分页方法 function pages()中有个pageurl 查看该方法,发现有类似htt ...