题目描述

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

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. 【备份】如何在 PADS Layout 中选择 Gerber 274X 格式

    如何在 PADS Layout 中选择 Gerber 274X 格式. 起初原因是 JLC 说 274X 和 274D 的差别. 有小伙伴使用了 274D 的格式,结果做出来的 PCB 有问题.

  2. 正则替换HTML里的style属性

    一个网友问: <p class="a" style="font-size: 12pt;  font-family: ""; color: red ...

  3. Java String类和StringBuffer类的区别

    1.String与StringBuffer的区别简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改:而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象.St ...

  4. 关于让simulink中display组件显示二进制的方法

    关于让simulink中display组件显示二进制的方法 1.首先需要配置gateway out模块,勾选propagate data type to output 2.配置display模块 fo ...

  5. 工控随笔_03_西门子_Step7项目打开后CPU显示问号解决方法

    我们在利用西门子的S7-300/400 PLC的编程软件Step7的时候会出现下面如图所示的问题. 在打开项目的时候,我们会在Simatic Manager里面看到CPU以及一些其他一些组件显示问号. ...

  6. Python 目录整理

    基础部分: 1  常量  2 字符编码  字符编码补充 3 编码集 4 break与continue 5装饰器 6 迭代器 7生成器 8面向过程 9模块 10包 11 递归调用 12文件的用途 13类 ...

  7. celery定时任务

    from celery import Celery from datetime import timedelta app = Celery('gx', broker='redis://localhos ...

  8. 如何通过dba_hist_active_sess_history分析数据库历史性能问题

    背景在很多情况下,当数据库发生性能问题的时候,我们并没有机会来收集足够的诊断信息,比如system state dump或者hang analyze,甚至问题发生的时候DBA根本不在场.这给我们诊断问 ...

  9. webservice之jax-rs实现方式

    1.什么叫restful风格 restful是一组架构约束条件和原则,满足这些约束条件和原则的应用程序即是restful风格. 2.jax-rs实现步骤 1.创建一个简单应用(略) 2.添加依赖jar ...

  10. 微信小程序之弹出操作菜单

    <view class="List_count" bindtap="actioncnt"> <view class="img&quo ...