博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU6301 Distinct Values (多校第一场1004) (贪心)
阅读量:6251 次
发布时间:2019-06-22

本文共 2574 字,大约阅读时间需要 8 分钟。

Distinct Values

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 4869    Accepted Submission(s): 1659

Problem Description
Chiaki has an array of
n positive integers. You are told some facts about the array: for every two elements ai and aj in the subarray al..r (li<jr), aiaj holds.
Chiaki would like to find a lexicographically minimal array which meets the facts.
 

 

Input
There are multiple test cases. The first line of input contains an integer
T, indicating the number of test cases. For each test case:
The first line contains two integers n and m (1n,m105) -- the length of the array and the number of facts. Each of the next m lines contains two integers li and ri (1lirin).
It is guaranteed that neither the sum of all n nor the sum of all m exceeds 106.
 

 

Output
For each test case, output
n integers denoting the lexicographically minimal array. Integers should be separated by a single space, and no extra spaces are allowed at the end of lines.
 

 

Sample Input
3 2 1 1 2 4 2 1 2 3 4 5 2 1 3 2 4
 

 

Sample Output
1 2 1 2 1 2 1 2 3 1 1
 
 
给出q个[l,r]   要求[l,r]范围内数字不重复 ,求字典序最小的满足q个要求的序列。
 
 
首先预处理出来覆盖每一个点的最左端点pre[i] ,用p从1开始 和  pre[i]比较,(因为当前区间是[pre[i], i],  上个区间是 [p, i-1] )  如果 p < pre[i] , 就把[p, pre[i]-1] 的数都释放了(插入set还能用)如果 p > pre[i], 直接取set.begin().
 
 
 
 
1 // D 2 #include 
3 using namespace std; 4 #define rep(i,a,n) for (int i=a;i
=a;i--) 6 #define pb push_back 7 #define mp make_pair 8 #define all(x) (x).begin(),(x).end() 9 #define fi first10 #define se second11 #define SZ(x) ((int)(x).size())12 typedef vector
VI;13 typedef long long ll;14 typedef pair
PII;15 const ll mod=1000000007;16 ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){
if(b&1)res=res*a%mod;a=a*a%mod;}return res;}17 ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}18 // head19 20 const int N=101000;21 int _,n,m,pre[N],l,r,ret[N];//pre维护覆盖i的最左端点 22 int main() {23 for (scanf("%d",&_);_;_--) {24 scanf("%d%d",&n,&m);25 rep(i,1,n+1) pre[i]=i;26 rep(i,0,m) {27 scanf("%d%d",&l,&r);28 pre[r]=min(pre[r],l);29 per(i,1,n) pre[i]=min(pre[i],pre[i+1]);//pre[i]是pre[i]和pre[i+1]的最小值30 int pl=1;//从1开始 和覆盖每个点的最左端点pre[i]比较31 set
val;32 rep(i,1,n+1) val.insert(i);//维护最小可用的数33 rep(i,1,n+1) {34 //上个 [pl, i-1]35 36 //当前 [pre[i], i]37 while (pl

 

 

转载于:https://www.cnblogs.com/ACMerszl/p/9613769.html

你可能感兴趣的文章
zoj 1904 Beavergnaw 计算圆柱和圆台的体积
查看>>
整理了一份招PHP高级工程师的面试题(转)
查看>>
Document对象中的一些重要的属性和方法(笔记)
查看>>
学习Raft算法的笔记
查看>>
[LeetCode]题解(python):053-Maximum Subarray
查看>>
SharePoint中的用户信息和检索的有关知识
查看>>
Linux系统在启动过程中grub引导文件丢失的解决方法
查看>>
day15-JavaScript条件语句和函数的定义
查看>>
使用acl网络通信库的 redis c++ 模块开发 redis 应用
查看>>
Geek的入门神器:micropython-能跑python的stm32开发板
查看>>
利用脚本获取mysql的tps,qps等状态信息
查看>>
Python Json数据排序
查看>>
[原创] zabbix学习之旅七:如何远程操作被监控机器
查看>>
第十一周编程总结
查看>>
PhoneURLConnectGEt
查看>>
darknet源码学习
查看>>
dl,dt,dd的用法
查看>>
外面的世界很精彩,然而等待你的人却可能已不在
查看>>
成为一名阿里P7Java架构师需要的技术准备(转载)
查看>>
华为oj 挑7
查看>>