51NOD 1402 最大值
来源:互联网 发布:威海手机数据恢复公司 编辑:程序博客网 时间:2024/05/22 13:00
1402 最大值题目来源: TopCoder基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题收藏关注一个N长的数组s[](注意这里的数组初始下标设为1,而不是0,即N个元素为s[1],s[2],...,s[N]),满足以下性质:1)每个元素都是非负的整数,且s[1]=0;2)任意两个相邻元素差值的绝对值不大于1,即| s[i]-s[i+1] |<=1;3)对于部分特殊点xi,要求s[xi]<=ti(这样的特殊点一共M个);问在以上约束下s[]中的最大值最大可能是多少?Input多组测试数据,第一行一个整数T,表示测试数据数量,1<=T<=5每组测试数据有相同的结构构成:第一行两个整数N,M,表示s[]的长度与特殊点的个数,其中1<=N<=100000,0<=M<=50.之后M行,每行两个整数xi与ti,其中1<=xi<=N,0<=ti<=100000,且xi以增序给出。Output每组数据一行输出,即数组的可能最大值。Input示例310 23 18 1100000 02718 51 10000030 100000400 1000001300 1000002500 100000Output示例3999992717
考虑让每个特殊点的值最大
不难发现 确定了特殊点的值 最大值就能在O(m)内找到
插入一个特殊值复杂度不超过O(m)
总体复杂度为O(m^2)
#include<iostream>#include<stdlib.h>#include<stdio.h>#include<string>#include<vector>#include<deque>#include<queue>#include<algorithm>#include<set>#include<map>#include<stack>#include<time.h>#include<math.h>#include<list>#include<cstring>#include<fstream>//#include<memory.h>using namespace std;#define ll long long#define ull unsigned long long#define pii pair<int,int>#define INF 1000000007#define pll pair<ll,ll>#define pid pair<int,double>vector<pii>vec;//记录特殊点上的值 first=下标 second=值void add(int x,int t){//插入特殊点 if(x==1)//下标为1 恒为0 return; int prex=vec.back().first;//上一个特殊点 int pret=vec.back().second; if(x>prex){ if(abs(x-prex)>=abs(t-pret)) vec.push_back({x,t}); else{ if(pret<t)//特殊点的最大值过大 vec.push_back({x,x-prex+pret}); else{//过小 需要把前面的特殊点的值减小 vec.pop_back();//删掉前面的点 add(prex,t+x-prex);//添加回一个适当小的 vec.push_back({x,t}); } } } else{ if(t<pret){//下标和上一个点相同 vec.pop_back(); add(x,t); } }}int main(){ //freopen("/home/lu/文档/r.txt","r",stdin); //freopen("/home/lu/文档/w.txt","w",stdout); int T,n,m,x,t; cin>>T; while(T--){ vec.clear(); vec.push_back({1,0}); cin>>n>>m; while(m--){ cin>>x>>t; add(x,t); } int ans=0; for(int i=1;i<vec.size();++i){ int x1=vec[i-1].first,x2=vec[i].first; int t1=vec[i-1].second,t2=vec[i].second; int tmp=abs(x2-x1)-1-abs(t1-t2); tmp=tmp%2+tmp/2; ans=max(ans,tmp+max(t1,t2)); } ans=max(vec.back().second+n-vec.back().first,ans); cout<<ans<<endl; } return 0;}
0 0
- 51nod 1402最大值
- 51NOD 1402 最大值
- 51nod 1402 最大值
- 51Nod 1402 最大值
- 51nod 1402 最大值
- 51Nod 1402 最大值问题
- 51nod 1402 最大值 【-.-思维??--】
- 51nod 1402 最大值问题
- 51nod 1402 最大值 (模拟)
- 51Nod-1402-最大值
- 51nod 1402 最大值(贪心)
- 51NOD 1402 最大值 By Assassin
- 【51NOD 1666】最大值
- 51nod 1163 最大值
- 51Nod-1349-最大值
- 51nod 1349 最大值
- 51Nod 1349 最大值
- [51nod 1292]字符串中的最大值V2
- 关于面向“专家”的实用技术与面向“大众”的普及技术
- Android中解决ListView等视图setOnItemClickListener()方法失效的问题
- how to get UDID
- 今夜月色真美
- 异常过滤器
- 51NOD 1402 最大值
- 文章标题
- Test 作业与安利
- java--Cookie应用
- Hdu4554 叛逆的小明
- 【SQL】按字段分组查询符合条件记录的方法
- opencv3学习笔记(一)——opencv入门
- KMP模版 【KMP】
- 【51单片机学习过程记录】9 中断之定时计数器0的使用2