题面

空间只有$64\text{MB}$!!!

题解

(据说正解是毒瘤分块套分块)

按照权值从大到小排序,对所有能够覆盖到它的区间的左端点打个标记

按照值域建一棵主席树就可以了

区间查询最大值,用$m$减去它即可

如何卡空间???

  1. 用位域将主席树的节点信息压到一个unsigned long long
  2. 将叶节点改成一个值,节省空间。(但是还是要开40倍)
  3. 永久化的标记和值压在一起。

最后以大约$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的更多相关文章

  1. 【CF543E】Listening to Music

    [CF543E]Listening to Music 题面 洛谷 题目大意 给你一个长度为\(n\)序列\(a_i\),和一个常数\(m\),定义一个函数\(f(l,x)\)为\([l,l+m-1]\ ...

  2. [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 ...

  3. [BEC][hujiang] Lesson03 Unit1:Working life ---Grammar & Listening & Vocabulary

    3 Working life p8 Grammar Gerund and infinitive(动名词和不定式) 一般而言:        1 动词后面接动名词还是不定式没有特定规则,主要取决于语言习 ...

  4. 错误信息:A TCP error (10013: 以一种访问权限不允许的方式做了一个访问套接字的尝试。) occurred while listening on IP Endpoint=192.168.1.18:8002.

    百度之后,知道这个原因是端口已经被其他进程打开了 使用cmd命令,查看8002端口被哪一个程序占用了 C:\Windows\System32>netstat -ano | find " ...

  5. 启动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 ...

  6. 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 然后重启即可. 我的 ...

  7. 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,之前安装好弄了一下,过了好几天,再次使 ...

  8. 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use

    在启动redis时报错 # Creating Server TCP listening socket *:6379: bind: Address already in use 错误原因 6379地址已 ...

  9. 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- ...

随机推荐

  1. 死磕salt系列-salt API 使用

    启用salt-api 服务 这里简单的说明下,SaltStack官方支持三种REST API,分别是rest_cherry; rest_tonado和rest_wsgi, 本文选择使用rest_che ...

  2. PAT——1063. 计算谱半径

    在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界.换言之,对于给定的n个复数空间的特征值{a1+b1i, ..., an+bni},它们的模为实部与虚部的平方和的开方,而“谱半径”就是最大模. ...

  3. POJ 1050 To the Max 最大子矩阵和(二维的最大字段和)

    传送门: http://poj.org/problem?id=1050 To the Max Time Limit: 1000MS   Memory Limit: 10000K Total Submi ...

  4. SharePoint2010代码启动工作流

    1. private void StartWorkFlow() { //获得该列表上的发布的所有工作流 SPWorkflowAssociationCollection wfAssociationCol ...

  5. center os 7 安装 elasticSeartch

    Centos7下安装配置elasticsearch 6.3.1   1)下载 Elasticsearch 6.3.1 地址:https://artifacts.elastic.co/downloads ...

  6. Eclipse操作Servlet入门案例,创建类无法实现Servlet接口和继承HttpServlet类

    问题描述: 从昨天下午到今天中午,这个问题被缠绕了良久.百度了很多,却都没有一言命中要害. 首先,还是基于对Web的理解. 第一:建立的是Dynamic  Web   Project: 第二:然后需要 ...

  7. 用js计算自己从出生到现在生活了多长时间(x天零x小时零x分钟零x秒) 初学者,大家多多包涵,有不足的地方请多包涵。

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 微信小程序实现转义换行符

    在html中可以直接使用<br />换行,但是小程序wxml中使用<br />无效,可以换成\n Page({ data: { title: '至少5个字\n请多说些感受吧' ...

  9. 如何使用yii2的缓存依赖特性

    目录 如何使用yii2的缓存依赖特性 概述 页面缓存 缓存依赖 链式依赖 总结 如何使用yii2的缓存依赖特性 概述 缓存是Yii2的强大特性之一,合理使用缓存技术可以有效地减小服务器的访问压力.Yi ...

  10. python学习笔记(二)python基础知识(交作业)

    交作业 #!/usr/bin/env python # coding: utf-8 # # 1. 每个用户购买了多少不同种类的产品 # filename = 'train.txt' import sy ...