luogu1083【2012提高】借教室(二分答案+差分前缀和)
2017-09-21 21:39
381 查看
二分答案是精髓,差分前缀和代替线段树,好写又精简!
#include <bits/stdc++.h> using namespace std; #define N 1000100 #define ll long long #define inf 0x3f3f3f3f inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int n,m,a ; struct node{ int val,st,ed; }b ; ll sum ; bool jud(int x){ memset(sum,0,sizeof(sum)); for(int i=1;i<=x;++i) sum[b[i].st]+=b[i].val,sum[b[i].ed+1]-=b[i].val; for(int i=1;i<=n;++i){ sum[i]+=sum[i-1]; if(sum[i]>a[i]) return 0; } return 1; } int main(){ // freopen("a.in","r",stdin); n=read();m=read(); for(int i=1;i<=n;++i) a[i]=read(); for(int i=1;i<=m;++i) b[i].val=read(),b[i].st=read(),b[i].ed=read(); int l=1,r=m,ans=0; if(jud(m)){puts("0");return 0;} while(l<=r){ int mid=l+r>>1; if(jud(mid)) l=mid+1,ans=mid; else r=mid-1; } printf("%d\n%d\n",-1,ans+1); return 0; }
相关文章推荐
- [NOIP2012提高]借教室 题解(二分答案+差分)
- LuoguP1083 借教室[NOIP2012] 解题报告【二分答案+差分】
- 洛谷 1083||NOIP 2012 借教室 二分答案+差分 解题报告
- NOIP2012 Day2 借教室-二分答案+差分
- Luogu 1083 借教室(二分,差分)
- Noip2012 Day2 T2 借教室 (二分答案+差分)
- NOIP2012借教室[线段树|离线 差分 二分答案]
- 【NOIP2012提高组】 借教室 前缀和+二分
- bzoj4326【2015提高】运输计划(二分答案+lca+树上差分前缀和)
- NOIP2012 借教室【二分答案+前缀和】
- 二分查找or线段树(借教室洛谷1083vijos1782NOIP 2012 提高组 第二天 第二题)
- 洛谷Luogu-1083 借教室(NOIP提高组2012 day2 t2)(详) HQG_AC的博客
- Luogu P1083 借教室【二分答案/差分】By cellur925
- noip 2012 借教室 二分+差分
- Luogu 1083(借教室)(NOIP 2012)
- 【NOIP2011提高组T5】聪明的质监员-二分答案+前缀和
- 洛谷P1083 noip 2012 借教室 二分+前缀和优化
- [NOIP 2012]借教室 二分+前缀和
- [二分答案 2-SAT验证 前缀后缀优化建图 线段树优化建图] Codeforces gym 100159 Facebook Hacker Cup 2012 I. Unfriending
- Luogu-2680 (二分答案+树上差分)