洛谷 1083 [NOIP2012] 借教室 二分
2017-10-16 15:57
260 查看
题目:
https://www.luogu.org/problem/show?pid=1083
线段树的基本操作;
但常数较大,可能会T 卡常无敌
我们发现,订单出现的时间(即输入顺序)满足单调性,所以可以二分时间;
为什么?
从代码中可以看出,左边界l内都是满足条件的订单,而右边界r内包含不满足条件的订单,则不满足条件的订单在(l,r]中;(我的二分写法是左开右闭);
因此,当左边界与右边界差1时(即while循环退出时),右边界r就是不满足条件的订单;
验证时可以利用差分的思想,O(m)处理出每天的预订数量;
二分时间,O(m)验证,所以总复杂度为O(mlogn);
总结:
1.本题的单调性隐藏的十分巧妙,是个二分好题,以后注意类似的题型.
当然,若是真的想不出来,敲个线段树也是可以的 ,只要复杂度正确,要尽量选择自己熟悉且保险的算法; 卡常无解
2.注意细节,这种区间累加型的题,要想到前缀和及差分O(n)处理;
3.注意二分边界;
https://www.luogu.org/problem/show?pid=1083
线段树的基本操作;
但常数较大,可能会T 卡常无敌
我们发现,订单出现的时间(即输入顺序)满足单调性,所以可以二分时间;
为什么?
从代码中可以看出,左边界l内都是满足条件的订单,而右边界r内包含不满足条件的订单,则不满足条件的订单在(l,r]中;(我的二分写法是左开右闭);
因此,当左边界与右边界差1时(即while循环退出时),右边界r就是不满足条件的订单;
验证时可以利用差分的思想,O(m)处理出每天的预订数量;
二分时间,O(m)验证,所以总复杂度为O(mlogn);
总结:
1.本题的单调性隐藏的十分巧妙,是个二分好题,以后注意类似的题型.
当然,若是真的想不出来,敲个线段树也是可以的 ,只要复杂度正确,要尽量选择自己熟悉且保险的算法; 卡常无解
2.注意细节,这种区间累加型的题,要想到前缀和及差分O(n)处理;
3.注意二分边界;
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> using namespace std; const int MAXN=2000001; int n,m,l=-1,r; int a[MAXN],sum[MAXN]; struct hh { int sta,end,d; }ma[MAXN]; bool check(int x) { memset(sum,0,sizeof(sum)); for(int i=1;i<=x;i++) sum[ma[i].sta]+=ma[i].d,sum[ma[i].end+1]-=ma[i].d; for(int i=1;i<=n;i++) { sum[i]=sum[i-1]+sum[i]; if(sum[i]>a[i]) return true; } return false; } void solve() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=m;i++) scanf("%d%d%d",&ma[i].d,&ma[i].sta,&ma[i].end); r=m+1; while(r - l > 1 ) { int mid=(l+r)>>1; if(check(mid)) r=mid; else l=mid; } if(!check(r))//判断是否全部满足; { cout<<"0"<<endl; return; } if(r) cout<<"-1"<<endl<<r<<endl; return; } int main() { solve(); return 0; }
相关文章推荐
- 二分查找or线段树(借教室洛谷1083vijos1782NOIP 2012 提高组 第二天 第二题)
- 洛谷 1083||NOIP 2012 借教室 二分答案+差分 解题报告
- LuoguP1083 借教室[NOIP2012] 解题报告【二分答案+差分】
- 【NOIP2012】【CJOJ1093】【洛谷1083】借教室
- 洛谷Luogu-1083 借教室(NOIP提高组2012 day2 t2)(详) HQG_AC的博客
- 【NOIP2012】【CJOJ1093】【洛谷1083】借教室
- [NOIP2012提高]借教室 题解(二分答案+差分)
- luogu1083【2012提高】借教室(二分答案+差分前缀和)
- Luogu 1083(借教室)(NOIP 2012)
- Noip2012 Day2 T2 借教室 (二分答案+差分)
- NOIP 2012 T5 借教室 [洛谷P1083]
- [NOIP2012] 提高组 洛谷P1083 借教室
- 【NOIP2012提高组】 借教室 前缀和+二分
- P2075 [NOIP2012T5]借教室 区间更新+二分查找
- NOIP2012借教室[线段树|离线 差分 二分答案]
- 洛谷P1083 [NOIP2012提高组Day2T2]借教室
- 【NOIP12TGD2T2】洛谷1083 借教室
- 洛谷P1083 noip 2012 借教室 二分+前缀和优化
- 【分块】【常数优化】【Orz faebdc】洛谷 P1083 NOIP2012提高组 借教室
- [NOIP 2012]借教室 二分+前缀和