原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1336.html

题目传送门 - 51Nod1336

题意

题解

  我们将输入的一个区间的答案称为 V 。

  我们考虑存在排列的两个充分必要条件:

  1. 一个值 V 只会出现在 询问结果为 V 的区间 中。

  2. 对于任意一个 V ,所有询问结果不大于 V 的区间的并中,只可能出现不大于 V 的值。

  于是我们只需要按照询问区间的 V 从小到达排序,然后依次处理即可。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=205;
int read(){
int x=0;
char ch=getchar();
while (!isdigit(ch))
ch=getchar();
while (isdigit(ch))
x=(x<<1)+(x<<3)+ch-48,ch=getchar();
return x;
}
struct HashTable{
int v[N],n;
void clear(){n=0;}
void push(int x){v[++n]=x;}
void Hash(){sort(v+1,v+n+1);n=unique(v+1,v+n+1)-v-1;}
int find(int x){return lower_bound(v+1,v+n+1,x)-v;}
}p,v;
int T,n,m;
vector <int> vs[N];
struct Seg{
int L,R,v;
Seg(){}
Seg(int _L,int _R,int _v){
L=_L,R=_R,v=_v;
}
}s[N],t[N];
bool Getline(){
for (int i=1;i<=m;i++){
s[i].L=read();
s[i].R=read();
s[i].v=read();
p.push(s[i].L),p.push(s[i].L+1);
p.push(s[i].R),p.push(s[i].R+1);
v.push(s[i].v);
}
p.Hash();
v.Hash();
for (int i=1;i<=v.n;i++)
vs[i].clear();
for (int i=1;i<=m;i++){
s[i].L=p.find(s[i].L);
s[i].R=p.find(s[i].R);
s[i].v=v.find(s[i].v);
vs[s[i].v].push_back(i);
}
for (int i=1;i<=v.n;i++){
int L=-1,R=p.n+1;
for (vector <int> :: iterator p=vs[i].begin();p!=vs[i].end();p++){
L=max(L,s[*p].L);
R=min(R,s[*p].R);
}
if (L>R)
return 0;
t[i]=Seg(L,R,v.v[i]);
}
return 1;
}
int cover[N];
void solve(){
p.clear(),v.clear();
n=read(),m=read();
if (!Getline()){
puts("Impossible");
return;
}
memset(cover,0,sizeof cover);
for (int i=1;i<=v.n;i++){
int cnt=0,L=t[i].L,R=t[i].R,val=v.v[i];
for (int j=L;j<=R;j++)
if (!cover[j])
cnt+=p.v[j+1]-p.v[j];
for (vector <int> :: iterator P=vs[i].begin();P!=vs[i].end();P++)
for (int j=s[*P].L;j<=s[*P].R;j++)
cover[j]=1;
int tot=0;
for (int j=1;j<=p.n;j++)
if (cover[j])
tot+=p.v[j+1]-p.v[j];
if (cnt==0||tot>v.v[i]){
puts("Impossible");
return;
}
}
puts("Possible");
}
int main(){
T=read();
while (T--)
solve();
return 0;
}

  

51Nod1336 RMQ逆问题 其他的更多相关文章

  1. 51nod 1336 RMQ逆问题

    RMQ问题是一类区间最值问题,这里给出一个特殊的RMQ问题,初始给定一个n长的排列P,注:n长排列是指有1~n这n个整数构成的一个序列每个整数恰好出现一次.并对这个排列P进行M次查询操作,每次查询形如 ...

  2. BZOJ 3489: A simple rmq problem

    3489: A simple rmq problem Time Limit: 40 Sec  Memory Limit: 600 MBSubmit: 1594  Solved: 520[Submit] ...

  3. UVA 11235Frequent values(RMQ)

    训练指南P198 题意:给出一个非降序排列的整数数组a1, a2…… an,你的任务是对于一系列询问(i,j),回答ai, ai+1 ……aj 中出现的次数最多的次数 这题不仅学到了rmq的应用还学到 ...

  4. 51nod1174(RMQ)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1174 题意:中文题诶- 思路:RMQ模板题 关于RMQ: h ...

  5. 2016 ACM/ICPC Asia Regional Dalian Online 1008 Function 二分+RMQ

    Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  6. Gym 100646 F Tanks a Lot RMQ

    Problem F: Tanks a Lot Imagine you have a car with a very large gas tank - large enough to hold what ...

  7. (RMQ版)LCA注意要点

    inline int lca(int x,int y){ if(x>y) swap(x,y); ]][x]]<h[rmq[log[y-x+]][y-near[y-x+]+]])? rmq[ ...

  8. 洛谷P2412 查单词 [trie树 RMQ]

    题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...

  9. POJ3368Frequent values[RMQ 游程编码]

    Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17581   Accepted: 6346 ...

随机推荐

  1. 3-html 缩写-地址-文字方向-引用块-题注的格式

    HTML Quotation and Citation Elements Tag Description <abbr> Defines an abbreviation or acronym ...

  2. 构造函数中base与this的区别

    base是对父类的引用,而this是对类本身的引用. namespace ConsoleApplication1 { public class BaseClass { private string n ...

  3. python之__call__()

    __call__ 在Python中,函数其实是一个对象: >>> f = abs >>> f.__name__ 'abs' >>> f(-123) ...

  4. Confluence 6 重构索引缓慢

    你的索引构建是否需要很长时间?索引构建需要的时间是由下面的一些因素确定的: 你 Confluence 安装实例中的页面数量. 附件的数量,类型和大小. Confluence 安装实例可用的内存大小. ...

  5. Confluence 6 数据库 JDBC 驱动

    本页面提供了支持的数据库的所有 JDBC 驱动下载链接. 基于许可证的原因,我们没有将 MySQL 或 Oracle 的数据库驱动整合到 Confluence 中,因此你需要在 Confluence ...

  6. leetcode(js)算法之914卡牌分组

    给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 X > ...

  7. nodejs之crypto加密算法

    示例 const crypto = require('crypto'); const hash = crypto.createHash('sha256'); hash.update('some dat ...

  8. react native 打包Ignoring return value of function declared with warn_unused_result attribute

    从 github上下载 项目 用于学习查看别人的代码, 当执行完npm install  用xcode 打开 发现俩个错误提示Ignoring return value of function dec ...

  9. 常用的Eclipse 快捷键

    显示所有快捷方式 SHIFT + CTRL + L 代码类 ALT + / 代码补全 ALT + 1 批量修改变量名 SHIFT + CTRL + F 自动格式代码4 SHIFT + ALT + R ...

  10. 性能测试五十:Jmeter+Influxdb+Grafana实时数据展示系统搭建

    如果用生成jtl文件再分析结果的方式的话,每一次请求就会往jtl里面写一条数据,在进行长时间的稳定性测试的时候,特别是当TPS很高的时候,写入的数据会非常的大,这个时候等稳定性测试完成,再对jtl进行 ...