题目: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小学 【 扫描线 】相关推荐

  1. 51nod 1631 小鲨鱼在51nod小学 【线段树--】

    1631 小鲨鱼在51nod小学 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的 ...

  2. 51NOD 1631 小鲨鱼在51nod小学 区间线段树

    1631 小鲨鱼在51nod小学 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依 ...

  3. 51nod 1631 小鲨鱼在51nod小学

    基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一 ...

  4. 1631 小鲨鱼在51nod小学 暴力

    1631 小鲨鱼在51nod小学 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依 ...

  5. 1631 小鲨鱼在51nod小学

    1631 小鲨鱼在51nod小学 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学. ...

  6. 1631 小鲨鱼在51nod小学(线段树区间修改+单点查询:不用下传lazy的区间修改)

    题目描述: 1631 小鲨鱼在51nod小学 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一个职务都有一个起始时间A和结束时间B, ...

  7. 51Nod——T 1631 小鲨鱼在51nod小学

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1631 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 ...

  8. 51Nod1631 小鲨鱼在51nod小学

    1631 小鲨鱼在51nod小学 1 秒 131,072 KB 20 分 3 级题 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一 ...

  9. 小鲨鱼在51nod小学

    鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一个职务都有一个起始时间A和结束时间B,意为小鲨鱼在[A, B]时间内,担任了某职务( ...

最新文章

  1. 批量计算多个点到一个点的距离
  2. 【直播回放】2小时全面剖析图像分类任务,学习CV必知
  3. 最小生成树(普里姆算法【Prim】与克鲁斯卡尔算法【Kruskal】)
  4. Centos DHCP服务搭建及测试
  5. 经典C语言程序100例之七九
  6. 小程序开发实战学习笔记
  7. django 如何提升性能(高并发)
  8. 无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll
  9. 正确关闭WCF代理对象
  10. pitr 原理_pgsql的备份和恢复
  11. windows下安装TensorFlow(Win8 + Anaconda4.4 python3.6)
  12. [个人笔记] 关于linux的常见问题合集
  13. Ubuntu 16.04 LTS深度美化!
  14. l455在线清零服务器,爱普生epson l455清零软件官方版
  15. WORD VBA实现查找带格式的文字并复制到特定地方
  16. Java中亦或运算符
  17. 《基于短时分数阶傅里叶变换的时频分析方法》
  18. javase简单入门1
  19. MySQL:排序(filesort)详细解析(8000字长文)
  20. 直播技术总结(一)流媒体服务器搭建,进行推流

热门文章

  1. Window线程安全与线程控制函数
  2. 机器人搏击大赛冠军_喜报|2019中国智能机器人格斗大赛,石大学子在轮式自主格斗A、B组中包揽双冠...
  3. android11 定位权限页面不显示始终允许
  4. java开发一年的心得体会
  5. 五年数字大屏之路,“述说”着我们大数据变现怎样的故事?(附演示视频)...
  6. JAVA全栈开发微服务架构模式
  7. Qt+VLC播放多个视频的Demo
  8. 安装软件时出现“error creating process错误”
  9. linux系统分辨率文件,Linux下显示分辨率低解决方法
  10. 计算机网络自顶向下——应用层