【思维题】TCO14 Round 2C InverseRMQ
全网好像就只有劼和manchery写了博客的样子……;正解可能是最大流?但是仔细特判也能过
题目描述
RMQ问题即区间最值问题是一个有趣的问题。
在这个问题中,对于一个长度为 n 的排列,query(l,r) 将返回 al,⋯,ar 中的最大值。
如对于 {3,1,4,2,5},query(2,4)=max(1,4,2)=4
现在我们给出 m 次询问的结果,问是否存在至少一个长度为 n 的排列 P 满足所有的条件。
输入格式
第一行 T
每一组数据中,第一行 n,m,接下来 m 行,每行 li,ri,ans
输出格式
T 行 Possible 或 Impossible
数据范围
对于 20% 的数据, n≤10
对于另 10% 的数据,li=ri
对于另 20% 的数据,[li,ri] 两两没有交集
对于另 20% 的数据,ansi 互不相同
对于所有数据,T≤10,n,m≤2000,1≤li≤ri≤n
时间限制 1s
空间限制 256MB
官方题解
先按照值从小到大排序
然后值一样的一起处理 如果交为空 无解
如果交被之前所有的并给完全包含了 无解
如果某一时刻并的大小比数字还大 无解
以上三点就是充要条件
题目分析
manchery的题解是比较详细的,但似乎漏了点什么
比如说这种情况:

就是不可以的。
第一遍做这题的时候有考虑到两个问题:
- 区间最大值不够这个区间用(manchery第三条条件)
- 空余位置不足够填下剩下的数字(以上的反例)
不过由于代码能力不足,并没有打出来……
#include<bits/stdc++.h>
const int maxn = ; struct point
{
int l,r,c;
}a[maxn],b[maxn],t[maxn];
int T,n,m,stb;
bool pot[maxn],fbd[maxn][maxn],insideConflict; int read()
{
char ch = getchar();
int num = ;
bool fl = ;
for (; !isdigit(ch); ch = getchar())
if (ch=='-') fl = ;
for (; isdigit(ch); ch = getchar())
num = (num<<)+(num<<)+ch-;
if (fl) num = -num;
return num;
}
int main()
{
T = read();
while (T--)
{
memset(fbd, , sizeof fbd);
memset(pot, , sizeof pot);
n = read(), m = read(), insideConflict = ;
for (int i=; i<=n; i++) a[i].l = , a[i].r = n, b[i].l = n, b[i].r = ;
for (int i=; i<=m; i++)
{
int l = read(), r = read(), c = read();
t[i].l = l, t[i].r = r, t[i].c = c;
if (c > n||c < ) insideConflict = ;
else{
pot[c] = ;
a[c].l = std::max(l, a[c].l), a[c].r = std::min(r, a[c].r);
b[c].l = std::min(l, b[c].l), b[c].r = std::max(r, b[c].r);
if (a[c].l > a[c].r) insideConflict = ;
}
}
for (int i=; i<=n; i++)
if (b[i].r-b[i].l+ > i){
insideConflict = ;
break;
}
if (insideConflict){
puts("Impossible");
continue;
}
for (int i=; i<=n; i++)
{
for (int j=; j<=n; j++) fbd[i][j] = fbd[i-][j];
if (pot[i-])
for (int j=b[i-].l; j<=b[i-].r; j++)
fbd[i][j] = ;
}
for (int i=; i<=n; i++)
{
stb = ;
for (int j=a[i].l; j<=a[i].r; j++)
if (!fbd[i][j]) stb = ;
if (!stb) break;
stb = ;
for (int j=; j<=n; j++)
if (!fbd[i][j]) stb++;
if (stb < n-i+){
stb = ;
break;
}
}
if (!stb)
puts("Impossible");
else puts("Possible");
}
return ;
}
END
【思维题】TCO14 Round 2C InverseRMQ的更多相关文章
- 贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas
题目传送门 /* 题意:套娃娃,可以套一个单独的娃娃,或者把最后面的娃娃取出,最后使得0-1-2-...-(n-1),问最少要几步 贪心/思维题:娃娃的状态:取出+套上(2),套上(1), 已套上(0 ...
- HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
题目:传送门. 题意:题目说的是求期望,其实翻译过来意思就是:一个长度为 n 的数列(n>=3),按顺序删除其中每一个数,每次删除都是建立在最原始数列的基础上进行的,算出每次操作后得到的新数列的 ...
- 思维题--code forces round# 551 div.2
思维题--code forces round# 551 div.2 题目 D. Serval and Rooted Tree time limit per test 2 seconds memory ...
- C. Nice Garland Codeforces Round #535 (Div. 3) 思维题
C. Nice Garland time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- [CF1244C] The Football Season【数学,思维题,枚举】
Online Judge:Luogu,Codeforces Round #592 (Div. 2) C Label:数学,思维题, 枚举 题目描述 某球队一共打了\(n\)场比赛,总得分为\(p\), ...
- zoj 3778 Talented Chef(思维题)
题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...
- cf A. Inna and Pink Pony(思维题)
题目:http://codeforces.com/contest/374/problem/A 题意:求到达边界的最小步数.. 刚开始以为是 bfs,不过数据10^6太大了,肯定不是... 一个思维题, ...
- ZOJ 3829 贪心 思维题
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...
- 洛谷P4643 [国家集训队]阿狸和桃子的游戏(思维题+贪心)
思维题,好题 把每条边的边权平分到这条边的两个顶点上,之后就是个sb贪心了 正确性证明: 如果一条边的两个顶点被一个人选了,一整条边的贡献就凑齐了 如果分别被两个人选了,一作差就抵消了,相当于谁都没有 ...
随机推荐
- Java程序动态编译Java源文件
最近接触到公司一个项目,需要将生成的源码动态编译,记录下学习过程. 先贴出官网推荐写法: JavaCompiler.CompilationTask getTask(Writer out, ...
- wcf双工通信
一直以为感觉双工没弄懂,着实觉得很惆怅,在网上了解下双工的一些特点,直接上代码,以便以后项目中用的着: service层: 定义一个IDuplexHello服务接口 [ServiceContract( ...
- JavaScript进阶 - 第9章 DOM对象,控制HTML元素
第9章 DOM对象,控制HTML元素 9-1 认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属 ...
- [软件工程基础]Alpha 软件测试报告
PhyLab Alpha 测试报告 测试中发现的bug Alpha版本限制与问题 由于接手时数据库已经丢失,这一版本主要修复了大部分数据库,使得网站得以运行. 相比接手时网站的状况,有以下改进: 恢复 ...
- 一篇文章彻底了解Java垃圾收集(GC)机制
垃圾收集(Garbage Collection ,GC),是一个长久以来就被思考的问题,当考虑GC的时候,我们必须思考3件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 那么在Java中,我们 ...
- Cache中间件和缓存降级
Cache中间件和缓存降级 1.前言 surging受到不少.net同学的青睐,也提了不少问题,提的最多的是什么时候集成API 网关,在这里回答大家最近已经开始着手研发,应该在1,2个月内会有个初版A ...
- 牛客网Java刷题知识点之为什么static成员方法不能是抽象方法,其必须实现
不多说,直接上干货! static修饰的方法我们称之为静态方法,我们通过类名对其进行直接调用.由于它在类加载的时候就存在了,它不依赖于任何实例,所以static方法必须实现,也就是说它不能是抽象方法.
- MySQL存储过程多条修改语句
DROP procedure Sel_Function_ActivityPastDueDELIMITER $$DROP procedure IF EXISTS`shouyi`.`Sel_Functio ...
- c# 视频播放
发表于: 2003-10-15 20:39:21 搞定了,嘿嘿!首先非常感谢zoujiaming在邮件中给我指了条路:用C#调用API搞定!!!使用的是mciSendString API函数主要参考了 ...
- 关于纠正《Hive权威指南》中的结论~“hive在使用set自定义变量时,hivevar命名空间是可选的”~的论证
背景: 根据<Hive权威指南>上讲,在hive-0.8.0以后可以使用--define key=value命令定义用户自定义的变量以便在Hive脚本中引用.当用户使用这个功能时,Hive ...