选美大赛(线段树)
来源:互联网 发布:ios 好用的数据库软件 编辑:程序博客网 时间:2024/05/16 17:16
点击打开链接
1、题目:
热烈庆祝ACM协会获山东理工大学明星社团!pingqing(pingqing)收件箱(0)注销 选美大赛Time Limit: 1000MS Memory limit: 65536K 题目描述 有n个模特参加选美大赛,各个比基尼选手都已经按照编号站在了评委面前,展现自我魅力与个性,等待脱颖而出! 而评委浪子,收录了每个参赛选手的身高和三围!!众所周知,浪子是个搞Acmer的,他总是对比赛外的一些东西有自己变态的想法!看到身高这一项数据,他就YY着是否能够求 出一系列最长区间(1个或多个)并保证满足:区间内最高的美女与最矮的美女的高度差不超过k!输入输入包含若干组测试数据:n,k(1<=n<=10^5,0<=k<=10^6); 对应每个美女的高度为 hi(1<=hi<=10^6)输出对于每组测试数据,输出最长区间长度以及个数; 并把每个区间输出出来!!(具体参考测试数据)示例输入3 314 12 102 010 10示例输出2 21 22 32 11 2
2、第一遍简单模拟ac的代码:
#include<stdio.h>#include<string.h>int a[1000015];struct node{ int s; int e; int len;} b[1000015];int c[1000015];int u[1000015];int main(){ int n,k; while(scanf("%d%d",&n,&k)!=EOF) { for(int i=1; i<=n; i++) { b[i].len=0; b[i].s=0; b[i].e=0; c[i]=0; u[i]=0; } int max=-1; int max1=-1; int min=999999; int d; for(int i=1; i<=n; i++) { scanf("%d",&a[i]); } int l=1,m=1; for(int j=1; j<=n; j++) { for(int i=j; i<=n; i++) { if(a[i]>max) max=a[i]; if(a[i]<min) min=a[i]; if((max-min>k)||((max-min<=k)&&(i==n))) { if(max-min<=k&&i==n) { b[l].len=i-j+1; b[l].s=j; b[l].e=i; } else { b[l].len=i-j; b[l].s=j; b[l].e=i-1; } c[b[l].len]++; if(b[l].len>=max1) { max1=b[l].len; u[m++]=l; } l++; min=99999; max=-1; break; } } } if(max1==1) { printf("1 %d\n",n); for(int i=1; i<=n; i++) printf("%d %d\n",i,i); } else { printf("%d %d\n",max1,c[max1]); for(int p=1; p<m; p++) { if(b[u[p]].len==max1) { printf("%d %d\n",b[u[p]].s,b[u[p]].e); } } } } return 0;}/*3 216 12 10*/
2、赛后线段树写的ac的代码:
#include<stdio.h>#include<iostream>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define max1 0x7fffffffint ma[400005],mi[400005],b[100005],c[100005];int ql[100005],qr[100005];int max(int a,int b){ if(a>b) return a; else return b;}int min(int a,int b){ if(a>b) return b; else return a;}void build(int l,int r,int rt){ int t; if(l==r) { scanf("%d",&t); ma[rt]=mi[rt]=t; return ;//зЂвт } int m=(l+r)>>1; build(lson); build(rson); ma[rt]=max(ma[rt<<1],ma[rt<<1|1]); mi[rt]=min(mi[rt<<1],mi[rt<<1|1]);//}int queryma(int L,int R,int l,int r,int rt){ if(L<=l&&R>=r) return ma[rt]; int ret=0; int m=(l+r)>>1;// if(L<=m) ret=max(ret,queryma(L,R,lson)); if(R>m) ret=max(ret,queryma(L,R,rson)); return ret;}int querymi(int L,int R,int l,int r,int rt){ if(L<=l&&R>=r) return mi[rt]; int m=(l+r)>>1,ret=max1;//错在ret赋值太小 if(L<=m) ret=min(ret,querymi(L,R,lson)); if(R>m) ret=min(ret,querymi(L,R,rson)); return ret;}int main(){ int n,k,t,ans,i,j; while(scanf("%d%d",&n,&k)!=EOF) { build(1,n,1); ans=t=0; for(i=j=1; j<=n; ++i) { if(j<i)j=i; while(j<=n&&(queryma(i,j,1,n,1)-querymi(i,j,1,n,1)<=k)) ++j; if(j-i>ans) { ans=j-i; ql[0]=i; qr[0]=j-1; t=1; } else if(j-i==ans) { ql[t]=i; qr[t++]=j-1; } } printf("%d %d\n",ans,t); for(i=0; i<t; ++i)printf("%d %d\n",ql[i],qr[i]); } return 0;}/*3 314 12 102 010 10*/
- 选美大赛(线段树)
- 选美大赛 beauty pageant
- HLG 选美大赛
- Hust oj 1116 选美大赛(LIS + 打印路径)
- Codeforces 246C Beauty Pageant(选美大赛)
- 选美
- 哈理工1116选美大赛(最长递增子序列)(对dp数组内数据的理解)
- 2007年中国IT前台MM选美大赛
- (C语言)选美比赛
- NYOJ-250-ROOM ASSIGNATION(第三届河南省程序设计大赛(复杂线段树))
- 华中农业大学第五届程序设计大赛 ICandies [线段树]【数据结构】
- 2013年湖南省第九届程序设计大赛 H 高桥和低桥 (线段树+二分)
- 选美比赛
- 论选美
- 选美比赛
- 选美比赛
- 选美比赛
- 炒汇与选美
- public.sh
- Extjs4.o的store结构类图详解
- Cocos2d坐标系统
- MySQL存储过程详解 mysql 存储过程
- Android4.0新的SDK新特性 (汉化)
- 选美大赛(线段树)
- public.sh
- js 生成随机数
- Java Filter过滤机制详解
- 从30岁到35岁:为你的生命多积累一些厚度
- 【javaMail】赵雅智_javaMail(5)准备实验环境
- Linux 下使用find rm命令删除svn目录
- 未能解析引用的程序集
- 接口测试中遇到的几点问题