51Nod 1631 小鲨鱼在51Nod小学 【 扫描线 】
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1631
题意:
分析:
吐槽:没想到这题n*q暴力都能过~~
我的做法是从最小日期扫描,维护一个优先队列保存目前担任的职务。离线查询。
时间复杂度O(天数*log200)=O(1000*365*2)
我的代码是输入的时候把少于一个自然月的职务直接略过,然而没有考虑到12月和1月的情况,导致 了2个小时QAQ
还可以把日期转化成整数,线段树查询。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+9;
struct date
{int y,m,d,x;bool operator < (const date& rhs)const{if(y==rhs.y&&m==rhs.m)return d>=rhs.d;if(y==rhs.y)return m>=rhs.m;return y>=rhs.y;}
};
struct datea
{int y0,m0,d0,y1,m1,d1,x;bool operator< (const datea& rhs)const{if(y0==rhs.y0&&m0==rhs.m0)return d0<rhs.d0;if(y0==rhs.y0)return m0<rhs.m0;return y0<rhs.y0;}
};
struct dateb
{int y,m,d,id;bool operator < (const dateb& rhs)const{if(y==rhs.y&&m==rhs.m)return d<rhs.d;if(y==rhs.y)return m<rhs.m;return y<rhs.y;}
};vector<int>ans[N];
dateb b[N];
datea a[N];
date c[N];
int main() {//freopen("in.txt","r",stdin);int n,y0,m0,d0,y1,m1,d1,x,Q,cnt=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d%d%d%d%d%d%d",&y0,&m0,&d0,&y1,&m1,&d1,&x);if(y0==y1&&m0==m1)continue;if(y0==y1&&m0==m1-1&&d0>d1)continue;if(y0+1==y1&&m0==12&&m1==1&&d0>d1)continue; //刚开始这一点没考虑a[cnt++]=(datea){y0,m0,d0,y1,m1,d1,x};}scanf("%d",&Q);for(int i=0;i<Q;i++){scanf("%d%d%d",&b[i].y,&b[i].m,&b[i].d);b[i].id=i;}n=cnt;sort(a,a+n);sort(b,b+Q);priority_queue<date>q;int y=2000,m=1,d=1,i=0,j=0;while(y<3000){while(i<n&&a[i].y0==y&&a[i].m0==m&&a[i].d0==d){q.push((date){a[i].y1,a[i].m1,a[i].d1,a[i].x});i++;}if(!q.empty()){date t=q.top();while(t.y<y||(t.y==y&&t.m<m)||(t.y==y&&t.m==m&&t.d<d)){q.pop();if(q.empty())break;t=q.top();}}while(j<Q&&b[j].y==y&&b[j].m==m&&b[j].d==d){int id=b[j].id;cnt=0;while(!q.empty()){c[cnt++]=q.top();q.pop();}for(int i=0;i<cnt;i++)q.push(c[i]),ans[id].push_back(c[i].x);j++;}if(j==Q)break;d++;if(d>31)d-=31,m++;if(m>12)m-=12,y++;}for(int i=0;i<Q;i++){int len=ans[i].size();printf("%d",len);sort(ans[i].begin(),ans[i].end());for(int j=0;j<len;j++)printf(" %d",ans[i][j]);printf("\n");}return 0;
}
51Nod 1631 小鲨鱼在51Nod小学 【 扫描线 】相关推荐
- 51nod 1631 小鲨鱼在51nod小学 【线段树--】
1631 小鲨鱼在51nod小学 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的 ...
- 51NOD 1631 小鲨鱼在51nod小学 区间线段树
1631 小鲨鱼在51nod小学 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依 ...
- 51nod 1631 小鲨鱼在51nod小学
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一 ...
- 1631 小鲨鱼在51nod小学 暴力
1631 小鲨鱼在51nod小学 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依 ...
- 1631 小鲨鱼在51nod小学
1631 小鲨鱼在51nod小学 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学. ...
- 1631 小鲨鱼在51nod小学(线段树区间修改+单点查询:不用下传lazy的区间修改)
题目描述: 1631 小鲨鱼在51nod小学 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一个职务都有一个起始时间A和结束时间B, ...
- 51Nod——T 1631 小鲨鱼在51nod小学
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1631 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 ...
- 51Nod1631 小鲨鱼在51nod小学
1631 小鲨鱼在51nod小学 1 秒 131,072 KB 20 分 3 级题 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一 ...
- 小鲨鱼在51nod小学
鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一个职务都有一个起始时间A和结束时间B,意为小鲨鱼在[A, B]时间内,担任了某职务( ...
最新文章
- 批量计算多个点到一个点的距离
- 【直播回放】2小时全面剖析图像分类任务,学习CV必知
- 最小生成树(普里姆算法【Prim】与克鲁斯卡尔算法【Kruskal】)
- Centos DHCP服务搭建及测试
- 经典C语言程序100例之七九
- 小程序开发实战学习笔记
- django 如何提升性能(高并发)
- 无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll
- 正确关闭WCF代理对象
- pitr 原理_pgsql的备份和恢复
- windows下安装TensorFlow(Win8 + Anaconda4.4 python3.6)
- [个人笔记] 关于linux的常见问题合集
- Ubuntu 16.04 LTS深度美化!
- l455在线清零服务器,爱普生epson l455清零软件官方版
- WORD VBA实现查找带格式的文字并复制到特定地方
- Java中亦或运算符
- 《基于短时分数阶傅里叶变换的时频分析方法》
- javase简单入门1
- MySQL:排序(filesort)详细解析(8000字长文)
- 直播技术总结(一)流媒体服务器搭建,进行推流
热门文章
- Window线程安全与线程控制函数
- 机器人搏击大赛冠军_喜报|2019中国智能机器人格斗大赛,石大学子在轮式自主格斗A、B组中包揽双冠...
- android11 定位权限页面不显示始终允许
- java开发一年的心得体会
- 五年数字大屏之路,“述说”着我们大数据变现怎样的故事?(附演示视频)...
- JAVA全栈开发微服务架构模式
- Qt+VLC播放多个视频的Demo
- 安装软件时出现“error creating process错误”
- linux系统分辨率文件,Linux下显示分辨率低解决方法
- 计算机网络自顶向下——应用层