XDOJ1156: 等待队列
来源:互联网 发布:开源cms系统 php商城 编辑:程序博客网 时间:2024/06/05 06:20
题意:大概就是有三种操作吧,第一种在队列后面加入新人,引入一个不耐烦程度,第二种第一个人出队(直接让头结点的序号+1即可),第三种统计在队伍里面不耐烦程度最高的数(PS:随着操作的进行队列中每一个人的不耐烦程度+1),刚开始我是将每个节点加入线段树中,对于每个操作,打上lazy标记,用线段树区间维护,然后TLE了,改了又改,在室友的提醒下,原来我可以把每个加入的节点都统一在第一个节点时插入,只要保证取最大就行,每次执行操作三,选出最大的,然后加上输入第几个操作即可,本来很水的一道题,硬是写了这么久,还是太菜了233333333,直接贴代码了;
#include<algorithm>#include<iostream>#include<queue>#include<stack>#include<vector>#include<map>#include<set>#include<cstring>#include<cstdio>#include<cmath>#define N 400005#define INF 0x3f3f3f3fusing namespace std;typedef struct node { int x; int y; int date; int ma;} node;node a[4*N];void built(int root,int first,int end) { if(first==end) { a[root].x=first; a[root].y=end; a[root].date=0; a[root].ma=0; return ; } int mid=(first+end)/2; built(root*2,first,mid); built(root*2+1,mid+1,end); a[root].x=a[root*2].x; a[root].y=a[root*2+1].y; a[root].date=0; a[root].ma=0;}void Q(int root,int first,int end,int e,int p) { if(first==e&&end==e) { a[root].date=p; return ; } int mid=(first+end)/2; if(e<=mid) Q(2*root,first,mid,e,p); else Q(2*root+1,mid+1,end,e,p); a[root].date=max(a[root*2].date,a[root*2+1].date);}int sum;void M(int root,int first,int end,int r,int l) { if(first>=r&&end<=l) { sum=max(sum,a[root].date); return ; } int mid=(first+end)/2; if(r<=mid) M(root*2,first,mid,r,l); if(l>mid) M(root*2+1,mid+1,end,r,l); a[root].date=max(a[root*2].date,a[root*2+1].date);}int main() { int m; while(scanf("%d",&m)==1) { int n,k; built(1,1,m); int fi=1; int en=0; int ans=0; for(int i=1; i<=m; i++) { scanf("%d",&n); if(n==1) { scanf("%d",&k); en++; Q(1,1,m,en,k-i+1); } else if(n==2) { fi++; } else if(n==3) { sum=-INF; M(1,1,m,fi,en); printf("%d\n",sum+i-1); } } } return 0;}
阅读全文
0 0
- XDOJ1156: 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- 等待队列
- windows网络编程之Select模型基础知识
- python Socket之客户端和服务端握手
- java利用zxing生成二维码
- 读懂Dubbo源码必备知识点之三
- #2 定义路由
- XDOJ1156: 等待队列
- leetcode中两道关于中位数的题295和480
- maven中依赖版本冲突如何解决--四种方式(四种原则)
- iOS Reachability监控网络使用
- 公告栏对话框管理(课堂笔记)
- PID校正仿真分析
- windows网络编程之重叠模型(OVERLAPPED I/O)基础知识
- mac os 安装thrift
- 手机如何扫描识别车牌