题目描述

“这好难啊,我有一个简单点的题,他们解决不了。”

AKPAKP有一个长度为nn的线段,这个线段原来染有颜色,AKPAKP只认识kk种颜色。当然原来的颜色也包含在着kk种颜色之间。

可以进行mm次操作:

  1. 改变一条起点为整点,单位长度的线段的颜色

  2. 查询包含所有kk种颜色的线段最少长度。

“我能做O(n6)O(n6). nn的范围多大?”

输入格式

第一行,三个数,nn,kk,mm。

第二行,nn个数,表示原来线段上的颜色。

下面mm行,每行第一个数optopt表示操作类型。

当opt=1opt=1时,继续读入两个数xx,yy,把第xx条线段改为yy颜色。

当opt=2opt=2时,表示查询包含所有kk种颜色的线段最少长度。

输出格式

对于每个opt=2opt=2的询问,输出当前包含所有kk种颜色的最少长度,如果无解,输出−1−1。

样例输入

4 3 5
2 3 1 2
2
1 3 3
2
1 1 1
2

样例输出

3
-1
4

数据范围

1≤n,m≤1051≤n,m≤105,1≤k≤501≤k≤50

Time Limit: 3s, Memory Limit 512Mb

不要提交多次卡评测。

题目分析
作为一个天天卡评测的人,我这回不卡评测了。首先我敲了个线段树,然后崩了。因为我不知道怎么维护lazy下传。zzq和zhouyi这种巨佬没话说,他们的神仙代码我看不懂。以后更新,我现在心累了。
 
# include <stdio.h>
# include <vector>
# include <algorithm>
typedef long long ll;
# define pli pair<ll, int>
# define MP make_pair
# define V first
# define NUM second
# define lc x<<
# define rc x<<|
using namespace std; int n, k, m;
int seq[]; int w[], llen[], rlen[];
pli left[][], right[][];
const int INF = ; inline bool in(ll a, ll b) {
return (a&b) == a;
} inline void merge(int x) {
w[x] = INF;
int plen = ;
for (int i=; i<=llen[lc]; ++i)
left[x][++plen] = left[lc][i];
for (int i=; i<=llen[rc]; ++i) {
if(plen == || !in(left[rc][i].V, left[x][plen].V)) {
left[x][++plen] = left[rc][i];
if(plen > ) left[x][plen].V = left[x][plen].V | left[x][plen-].V;
}
}
llen[x] = plen; int slen = ;
for (int i=; i<=rlen[rc]; ++i)
right[x][++slen] = right[rc][i];
for (int i=; i<=rlen[lc]; ++i) {
if(slen == || !in(right[lc][i].V, right[x][slen].V)) {
right[x][++slen] = right[lc][i];
if(slen > ) right[x][slen].V = right[x][slen].V | right[x][slen-].V;
}
}
rlen[x] = slen; // merge int rpos = ;
for (int lpos = llen[rc]; lpos >= ; --lpos) {
while(rpos <= rlen[lc] && (right[lc][rpos].V | left[rc][lpos].V) != (1LL<<k)-) ++rpos;
if(rpos <= rlen[lc]) {
if((right[lc][rpos].V | left[rc][lpos].V) == (1LL<<k)-) {
w[x] = min(w[x], left[rc][lpos].NUM - right[lc][rpos].NUM+);
}
}
}
w[x] = min(w[x], min(w[lc], w[rc]));
} inline void change(int x, int l, int r, int pos, int del) {
if(l == r) {
llen[x] = rlen[x] = ;
left[x][] = right[x][] = MP(1LL<<del, l);
w[x] = INF;
return ;
}
int mid = l+r>>;
if(pos <= mid) change(lc, l, mid, pos, del);
else change(rc, mid+, r, pos, del);
merge(x);
} int main() { scanf("%d%d%d", &n, &k, &m); for (int i=; i<=n; ++i) {
scanf("%d", &seq[i]);
change(, , n, i, seq[i]-);
} int opt, ta, tb;
while(m--) {
scanf("%d", &opt);
if(opt == ) {
printf("%d\n", w[] == INF ? - : w[]);
} else {
scanf("%d%d", &ta, &tb);
change(, , n, ta, tb-);
}
} return ;
}

代码分析

TongFang不会介意的,我copy了他的代码,自己不会写。

【COCI 2015/2016 #3】Nekameleoni的更多相关文章

  1. 【BZOJ 3881】【COCI 2015】Divljak

    http://www.lydsy.com/JudgeOnline/problem.php?id=3881 好难的一道题啊qwq 一开始我想对T建AC自动机,根本不可做. 正解是对S建AC自动机. fa ...

  2. 【NOIP 2015 DAY2 T3】 运输计划 (树链剖分-LCA)

    题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家 ...

  3. COCI 2015/2016 Day 8 PROKLETNIK

    PROKLETNIK 题目描述:给出\(n\)个数,定义一段连续的数为魔法串是该区间的左右端点值正好是区间的最小值与最大值(最小值可以在左也可以在右,最大值也一样).\(Q\)个询问,每次询问一个区间 ...

  4. bzoj3939 【USACO 2015 FEB GOLD 】cow hopscotch

    Description 就像人类喜欢玩"跳房子"的游戏,农民约翰的奶牛已经发明了该游戏的一个变种自己玩.由于笨拙的动物体重近一吨打,牛跳房子几乎总是以灾难告终,但这是没有阻止奶牛几 ...

  5. B【USACO 2015 Jan Gold】牧草鉴赏家

    时间限制 : 10000 MS   空间限制 : 65536 KB 问题描述 约翰有n块草场,编号1到n,这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草. 贝 ...

  6. 【NOIP 2015 D1 T2】信息传递(图论--带权并查集/bfs)

    题目:有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学.游戏开始时,每人都只知道自己的生日.之后每一轮中, ...

  7. bzoj 4736 /uoj274【清华集训2016】温暖会指引我们前行 lct

    [清华集训2016]温暖会指引我们前行 统计 描述 提交 自定义测试 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了 ...

  8. [官方软件] Easy Sysprep v4.3.29.602 【系统封装部署利器】(2016.01.22)--skyfree大神

    [官方软件] Easy Sysprep v4.3.29.602 [系统封装部署利器](2016.01.22) Skyfree 发表于 2016-1-22 13:55:55 https://www.it ...

  9. 【MyEclipse 2015】 逆向破解实录系列【终】(纯研究)

    声明 My Eclipse 2015 程序版权为Genuitec, L.L.C所有. My Eclipse 2015 的注册码.激活码等授权为Genuitec, L.L.C及其付费用户所有. 本文只从 ...

随机推荐

  1. 福利之——如何写好年终总结PPT

    撰写年终总结PPT大致分三个步骤(TDR三部曲): 第一步:确定大纲(THINK) 第二步:优化PPT(DESIGN) 第三步:练习演讲(REHEARSE) 让领导看见你的成绩,听明白你未来的‘宏伟计 ...

  2. zabbix4.0离线快速编译安装(编译安装方法)

    本博客已整理更新至第二版.更新与2019.4.17 其实这个主要是想试一下离线编译安装的具体步骤,记得要配置好本地yum云,因为我们需要使用yum,yum能帮我们自动解决很多依赖问题.发现最主要的问题 ...

  3. 多次ajax请求数据json出错!!

    问题描述: 1.对象数据存放在session中,每次从session中取数据 2.jsp初始化完毕调用ajax请求,返回的数据格式出错(返回部分数据,即丢失了部分数据) 解决方案:

  4. ES6模板字符串【${}配合反单引号一起用】

    先看看JavaScript中两个字符串的效果,就很容易知道模板字符串是个啥东西,其实一点也不新鲜.高级编程中,例如java里面的string.format就是干这个事情,诸如此类. 1. 概念理解 A ...

  5. win10 caffe GPU环境搭建

    一.准备 系统:win10 显卡:gtx1050Ti 前期的一些必要软件安装,包括python3.5.matlab2016.vs2015.git, 可参考:win10+vs2015编译caffe的cp ...

  6. Android嵌套滑动不流畅记录随笔

    ---恢复内容开始--- 今天第一次用到ScrollView嵌套RecyclerView来做页面. 刚开始效果开心得很,非常Very漂亮噢! 纳尼!!!沃特Fuck!出事儿,出事儿! 滑动为何如此不流 ...

  7. 解决spyder、Jupyter Notebook 打不开

    参考: https://blog.csdn.net/lanchunhui/article/details/72891918 https://stackoverflow.com/questions/49 ...

  8. ActiveMQ(下载,启动,java程序中 如何操作)

    为了快速上手ActiveMQ 找个一个windows版本的mq来实现它的功能 1.http://activemq.apache.org/activemq-5158-release.html 下载 2. ...

  9. IOC注入框架——Unity中Web.Config文件的配置与调用

    Unity 应用程序块可以从 XML 配置文件中读取配置信息.配置文件可以是 Windows Forms 应用程序的 App.config 或者 ASP.NET 应用程序的 Web.config.当然 ...

  10. RabbitMQ tutorial

    一.安装RabbitMQ RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开 ...