题目描述

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

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. 【转】Session Cookie Token的区别

    Cookie cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能. cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保 ...

  2. Scrapy 代理IP

    Scrapy 代理IP 一.Scarpy使用代理IP 1.在setting.py 配置 代理服务器IP 2.在middlermares.py 配置 downloadmiddlermare(下载中间件) ...

  3. php设置cookie为httponly防止xss攻击

    什么是XSS攻击? XSS攻击(Cross Site Scripting)中文名为跨站脚本攻击,XSS攻击时web中一种常见的漏洞.通过XSS漏洞可以伪造目标用户登录,从而获取登录后的账号操作. 网站 ...

  4. Dubbo 入门学习笔记

    项目结构 模块介绍: DubboAPI    ----API接口 DubboConsumer ----消费者 DubboProvider ----生产者 DubboAPI  Service 提供的接口 ...

  5. api签名认证方案

    微信签名算法 token (自己后台配置) nonce:随机数 signature:签名 echostr:返回字符串 https://mp.weixin.qq.com/wiki?t=resource/ ...

  6. TIDB 备忘

    ALTER TABLE TableName MODIFY COLUMN -- 最后更新时间,自动赋值 dtModify ) NULL DEFAULT now() ON UPDATE now();

  7. QNET,一款给力的APP弱网络测试工具

    目前在测试移动设备上进行弱网络专项测试的方案主要有两种: 通过Android设备连接到PC上进行弱网络测试,比如Fiddler,Charles,NET-Simulator等.基本思路是在PC上装一个F ...

  8. 【如皋OJ】1127:正整数N转换成一个二进制数

    1127: 正整数N转换成一个二进制数 时间限制: 1 Sec  内存限制: 128 MB提交: 85  解决: 59[提交] [状态] [讨论版] [命题人:zhuzhigang] 题目描述 输入一 ...

  9. Git在已有的分支上新建个人分支开发

    在Dev分支上新建一个分支(可以通过Git TE网页创建) 然后就可以从Source下拉列表中看到新建的分支(new_name1)了. 远程分支创建完成之后,就可以在本机上面使用Git GUI Her ...

  10. Solr4.7.0连接Oracle

    1.把Oracle的Jar包  例如:ojdbc14.jar  或其他版本 放到D:\apache-tomcat-7.0.57\webapps\solr\WEB-INF\lib下 2.然后在tomca ...