1291 火车线路

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 大师 Master

题解

查看运行结果

题目描述 Description

某列火车行使在C个城市之间(出发的城市编号为1,结束达到的城市的编号为C),假设该列火车有S个座位,现在有R笔预订票的业务。现在想对这R笔业务进行处理,看哪些预定能满足,哪些不能满足。

一笔预定由O、D、N三个整数组成,表示从起点站O到目标站D需要预定N个座位。一笔预定能满足是指该笔业务在行程范围内有能满足的空座位,否则就不能满足。一笔业务不能拆分,也就是起点和终点站不能更改,预定的座位数目也不能更改。所有的预定需求按给出先后顺序进行处理。

请你编写程序,看那些预定业务能满足,那些不能满足。

输入描述 Input Description

输入文件中的第一行为三个整数CSR(1<=c<=60 000, 1<=s<=60 000, 1<=r<=60 000)他们之间用空隔分开。接下来的R行每行为三个整数O、D、N,(1<=o<d<=c, 1<=n<=s),分别表示每一笔预定业务。

输出描述 Output Description

对第I笔业务,如果能满足,则在输出文件的第I行输出“T”,否则输出“N”

样例输入 Sample Input

4 6 4
1 4 2
1 3 2
2 4 3

1 2 3

样例输出 Sample Output

T
T
N

N‘

’mmzz题目有毒。。。

本来就是个裸地线段树记录最小值。

结果误解他题目了,。

调了三个小时

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<cmath>
  5 #include<queue>
  6 #include<algorithm>
  7 #define ls k<<1
  8 #define rs k<<1|1
  9 using namespace std;
 10 const int MAXN=2000001;
 11 void read(int &n)
 12 {
 13     char c=‘+‘;int x=0;bool flag=0;
 14     while(c<‘0‘||c>‘9‘)
 15     {c=getchar();if(c==‘-‘)flag=1;}
 16     while(c>=‘0‘&&c<=‘9‘)
 17     {x=x*10+c-48,c=getchar();}
 18     flag==1?n=-x:n=x;
 19 }
 20 int n,m,chair;
 21 int ans=-1;
 22 struct node
 23 {
 24     int l,r,w,fm;
 25 }tree[MAXN*4];
 26 void update(int k)
 27 {
 28     tree[k].w=min(tree[ls].w,tree[rs].w);
 29
 30 }
 31 void pushdown(int k)
 32 {
 33     tree[ls].w-=tree[k].fm;
 34     tree[rs].w-=tree[k].fm;
 35     tree[ls].fm+=tree[k].fm;
 36     tree[rs].fm+=tree[k].fm;
 37     tree[k].fm=0;
 38     //cout<<"ls:"<<(ls)<<" "<<tree[ls].w<<" ";
 39     //cout<<"rs:"<<(rs)<<" "<<tree[rs].w<<" "<<endl;
 40 }
 41 void build_tree(int ll,int rr,int k)
 42 {
 43     tree[k].l=ll;tree[k].r=rr;
 44     if(ll==rr)
 45     {
 46         tree[k].w=chair;
 47         return ;
 48     }
 49     int mid=(ll+rr)>>1;
 50     build_tree(ll,mid,ls);
 51     build_tree(mid+1,rr,rs);
 52     update(k);
 53 }
 54 void interval_ask(int ll,int rr,int num,int k)
 55 {
 56     if(ll>tree[k].r||rr<tree[k].l)
 57         return ;
 58     if(ll<=tree[k].l&&tree[k].r<=rr)
 59     {
 60         if(tree[k].w<num)
 61             ans=-1;
 62         return ;
 63     }
 64     int mid=(tree[k].l+tree[k].r)>>1;
 65     if(tree[k].fm)
 66     pushdown(k);
 67     if(ll<=mid)
 68     interval_ask(ll,rr,num,ls);
 69     if(rr>mid)
 70     interval_ask(ll,rr,num,rs);
 71     if(tree[k].fm)
 72     pushdown(k);
 73 }
 74 void point_change(int pos,int v,int k)
 75 {
 76     if(pos>tree[k].r||pos<tree[k].l)
 77         return ;
 78     if(tree[k].l==tree[k].r)
 79     {
 80         tree[k].w=v;
 81         return ;
 82     }
 83     point_change(pos,v,ls);
 84     point_change(pos,v,rs);
 85     update(k);
 86 }
 87
 88 void interval_change(int ll,int rr,int num,int k)
 89 {
 90     if(ll>tree[k].r||rr<tree[k].l)
 91         return ;
 92     if(ll<=tree[k].l&&rr>=tree[k].r)
 93     {
 94         tree[k].w-=num;
 95         tree[k].fm+=num;
 96         return ;
 97     }
 98     int mid=(tree[k].l+tree[k].r)>>1;
 99     if(tree[k].fm)
100     pushdown(k);
101     if(ll<=mid)
102     interval_change(ll,rr,num,ls);
103     if(rr>mid)
104     interval_change(ll,rr,num,rs);
105     update(k);
106 }
107 int main()
108 {
109     read(n);read(chair);read(m);
110     build_tree(1,n,1);
111     for(int i=1;i<=m;i++)
112     {
113         int l,r,num;
114         ans=1;
115         read(l);read(r);read(num);
116         r--;
117         interval_ask(l,r,num,1);
118         if(ans!=1)
119             printf("N\n");
120         else
121         {
122             interval_change(l,r,num,1);
123             printf("T\n");
124         }
125     }
126     return 0;
127 } 
时间: 2024-12-14 18:42:39

1291 火车线路的相关文章

codevs 1291 火车线路

http://codevs.cn/problem/1291/ 题目描述 Description 某列火车行使在C个城市之间(出发的城市编号为1,结束达到的城市的编号为C),假设该列火车有S个座位,现在有R笔预订票的业务.现在想对这R笔业务进行处理,看哪些预定能满足,哪些不能满足. 一笔预定由O.D.N三个整数组成,表示从起点站O到目标站D需要预定N个座位.一笔预定能满足是指该笔业务在行程范围内有能满足的空座位,否则就不能满足.一笔业务不能拆分,也就是起点和终点站不能更改,预定的座位数目也不能更改

codevs1291 火车线路

题目描述 Description 某列火车行使在C个城市之间(出发的城市编号为1,结束达到的城市的编号为C),假设该列火车有S个座位,现在有R笔预订票的业务.现在想对这R笔业务进行处理,看哪些预定能满足,哪些不能满足. 一笔预定由O.D.N三个整数组成,表示从起点站O到目标站D需要预定N个座位.一笔预定能满足是指该笔业务在行程范围内有能满足的空座位,否则就 不能满足.一笔业务不能拆分,也就是起点和终点站不能更改,预定的座位数目也不能更改.所有的预定需求按给出先后顺序进行处理. 请你编写程序,看那

【CODEVS1291】火车线路

题目描述 Description 某列火车行使在C个城市之间(出发的城市编号为1,结束达到的城市的编号为C),假设该列火车有S个座位,现在有R笔预订票的业务.现在想对这R笔业务进行处理,看哪些预定能满足,哪些不能满足. 一笔预定由O.D.N三个整数组成,表示从起点站O到目标站D需要预定N个座位.一笔预定能满足是指该笔业务在行程范围内有能满足的空座位,否则就不能满足.一笔业务不能拆分,也就是起点和终点站不能更改,预定的座位数目也不能更改.所有的预定需求按给出先后顺序进行处理. 请你编写程序,看那些

大数据分析案例

部分数据来源于网络,如有侵权请告知. 一.大数据分析在商业上的应用 1.体育赛事预测 世界杯期间,谷歌.百度.微软和高盛等公司都推出了比赛结果预测平台.百度预测结果最为亮眼,预测全程64场比赛,准确率为67%,进入淘汰赛后准确率为94%.现在互联网公司取代章鱼保罗试水赛事预测也意味着未来的体育赛事会被大数据预测所掌控. “在百度对世界杯的预测中,我们一共考虑了团队实力.主场优势.最近表现.世界杯整体表现和博彩公司的赔率等五个因素,这些数据的来源基本都是互联网,随后我们再利用一个由搜索专家设计的机

luogu P1768 天路

题目描述 “那是一条神奇的天路诶~,把第一个神犇送上天堂~”,XDM先生唱着这首“亲切”的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUNSHINE大神商量后,这道猥琐的题目终于出现在本次试题上了,旨在难到一帮大脑不够灵活的OIer们(JOHNKRAM真的不是说你……). 言归正传,小X的梦中,他在西藏开了一家大型旅游公司,现在,他要为西藏的各个景点设计一组铁路线.但是,小X发现,来旅游的游客都很挑剔,他们乘火车在各个景点间游览,景点的趣味当然是不用说啦,关键是路上.试想,若是乘火车一圈转悠

12306的变态验证码算得了什么?我有Python神器!

前言:大家跟我一起念,Python 大Fa好,跟着本宝宝用Python抢火车票! 首先我们需要splinter 安装: pip install splinter -i http://pypi.douban.com/simple –trusted-host pypi.douban.com 然后还需要一个浏览器的驱动,当然用chrome啦 下载地址: http://chromedriver.storage.googleapis.com/index.html?path=2.20/ 根据下载的自己的电脑

用Python抢枪过年的火车票

前言:大家跟我一起念,Python大法好,跟着本宝宝用Python抢火车票 首先我们需要splinter 安装: pip install splinter -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 然后还需要一个浏览器的驱动,当然用chrome啦 下载地址: http://chromedriver.storage.googleapis.com/index.html?path=2.20/ 根据下载的自己的电脑系统

[转] Symbol对象

GIS中的离散实体有三种:点.线.面,在ArcEngine中用三种符号对应表示,分别是:MarkSymbol.LineSymbol和FillSymbol.此外还有TextSymbol用于文字标注,3DChart用来显示饼图等三维对象. 所有符号都实现ISymbol和IMapLevel接口,ISymbol定义一个符号对象的基本属性和方法,IMapLevel定义属性可以确定符号显示的图层,和图层类似,用于确定符号的叠加顺序. 一.MarkerSymbol对象 MarkerSymbol对象用于修饰点对

肯德基的选址秘籍

肯德基的选址步骤 第一步:划分商圈--用数据说话 肯得基计划进入某城市,就先通过有关部门或专业调查公司收集这个地区的资料,有些资料是免费的,有些资料需要花钱去买.把资料买齐了,就开始规划商圈. 商圈规划采取的是记分的方法,例如,这个地区有一个大型商场,商场营业额在1000万元算一分,5000万元算五分,有一条公交线路加多少分,有一条地铁线路加多少分,这些分值标准是多少年平均下来的一个较准确经验值.通过打分把商圈分成好几大类,以天津为例,有市级商业型(和平路等),区级商业型,定点(目标)消费型,还