【差分+二分】借教室

因为是按订单顺序处理的,所以前面的订单都能处理,后面的订单都不能处理,所以可以通过二分得到第一个不能满足的订单

这里和之前的二分不太一样,注意,如果所有的订单都能满足的话ans将不会被赋值,所以需要提前设置ans的值

int l=1,r=m,mid,ans=m;

while(l<=r)
 {
  mid=(l+r)/2;
  if (check(mid))
   l=mid+1;
  else
  {
   ans=mid;
   r=mid-1;
  }
 }

给出了订单的开始时间和结束时间,所以很容易想到用差分

所谓差分就是将一个对区间的操作变为对区间端点的操作

sum[s[i]]+=d[i];

sum[t[i]+1]-=d[i];

 1 #include <cstdio>
 2 #include <cstring>
 3 int n,m,r[1000001],d[1000001],s[1000001],t[1000001],sum[1000001];
 4 inline int read(int &x)
 5 {
 6     char ch=getchar();x=0;
 7     for (;ch<‘0‘||ch>‘9‘;ch=getchar());
 8     for (;ch>=‘0‘&&ch<=‘9‘;ch=getchar())x=x*10+ch-‘0‘;
 9 }
10 inline bool check(int x)
11 {
12     memset(sum,0,sizeof(sum));
13     int dsum=0;
14     for (int i=1;i<=x;i++)
15     {
16         sum[s[i]]+=d[i];
17         sum[t[i]+1]-=d[i];
18     }
19     for (int i=1;i<=n;i++)
20     {
21         dsum+=sum[i];
22         if (dsum>r[i]) return 0;
23     }
24     return 1;
25 }
26 int main()
27 {
28     read(n);read(m);
29     for (int i=1;i<=n;i++) read(r[i]);
30     for (int i=1;i<=m;i++) read(d[i]),read(s[i]),read(t[i]);
31     int l=1,r=m,mid,ans=m;
32     while(l<=r)
33     {
34         mid=(l+r)/2;
35         if (check(mid))
36             l=mid+1;
37         else
38         {
39             ans=mid;
40             r=mid-1;
41         }
42     }
43     if (ans==m)
44         printf("0");
45     else
46         printf("-1\n%d",ans);
47 }
时间: 2024-08-28 02:54:47

【差分+二分】借教室的相关文章

[前缀和+二分]借教室

借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样.面对海量租借教室的信息,我们自然希望编程解决这个问题.我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借.共有m份订单,每份订单用三个正整数描述,分别为dj, sj, tj ,表示某租借者需要从第sj 天到第tj 天租借教室(包括第sj天和第tj天),每天需要租借dj个教室.我们假定,租借者对教室的大小.

NOIP2012借教室[线段树|离线 差分 二分答案]

题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望编程解决这个问题. 我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借.共有m份 订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从第sj天到第tj天租 借教室(包括第sj天和第tj天),每天需要租借dj个教室. 我们假定,租借者对教室的大小.地点没

洛谷P1083 借教室 二分 + 差分

洛谷P1083 借教室 二分 + 差分(或说前缀和,其实前缀和更准确一点) 首先二分答案,即取 mid 个人,且他们不会冲突 然后O(n) 判断是否冲突 如何判断呢,首先我们发现 一个人的操作相当于是将 一些连续的山削去了一个高度 然后我们可以记录这座山被消了多少高度,但这样一次就要 O(N) 总共(n^2) 但是我们发现高度差只有两个地方变了,一个是起始,一个是终止 t[ i ] 表示 h[ i ] - h[ i-1 ] 改变过后 于是 t[ s ]-=d,t[ t+1 ]+=d ; 然后这样

Luogu P1083 借教室【二分答案/差分】By cellur925

题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望编程解决这个问题. 我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借.共有m份 订单,每份订单用三个正整数描述,分别为dj, sj, tj,表示某租借者需要从第sj天到第tj天租 借教室(包括第sj天和第tj天),每天需要租借dj个教室. 我们假定

借教室 差分+二分答案

题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望编程解决这个问题. 我们需要处理接下来nnn天的借教室信息,其中第iii天学校有rir_iri?个教室可供租借.共有mmm份订单,每份订单用三个正整数描述,分别为dj,sj,tjd_j,s_j,t_jdj?,sj?,tj?,表示某租借者需要从第sjs_jsj?天到第tjt_jtj?天租借教室(包

浅谈差分数组的应用(二)&amp;[NOIP2012]借教室题解

[NOIP2012提高&洛谷P1083]借教室 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样.面对海量租借教室的信息,我们自然希望编程解决这个问题. 我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借.共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要

不用二分的借教室

在网上一直看到用二分做的借教室,说什么线段树会惨遭TLE,然后我就试了一下,并没有什么事情发生(或许是因为optimizi(2)...),但并没有什么关系!!! 我们只需要在每个树的节点上打上mi的标记,表示其子树的最小值,在更新的时候如果mi小于0,就知道不行了,标记一下直接输出就好了... 详见代码: #include<bits/stdc++.h> #pragma GCC optimize(2) #define in1(x) scanf("%d",&x) #de

P2075 [NOIP2012T5]借教室 区间更新+二分查找

P2075 [NOIP2012T5]借教室 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 noip2012-tg 描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样.面对海量租借教室的信息,我们自然希望编程解决这个问题.我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借.共有m份订单,每份订单用三个正整数描述,分别为dj,s

NOIP2012TG DAY2T2 借教室 二分

最近SLQ正在讲二分……感觉NOIP连考两年二分(聪明的质检员.借教室)也真是…… 二分加前序和,水过. //NOIRP:题目没说用long long啊,出题人你坑我= = //出题人:(怪我咯?)10^9*10^6你不会算? 1 #include<iostream> 2 using namespace std; 3 const int N=1000005; 4 typedef long long LL; 5 struct ask{ 6 int l,r,s; 7 }xw[N]; 8 LL qz

二分查找or线段树(借教室洛谷1083vijos1782NOIP 2012 提高组 第二天 第二题)

在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望编程解决这个问题.我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借.共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要租借dj个教室. 我们假定,租借者对教室的大小.地点没有要求.即对于每份