Luogu 1083(借教室)(NOIP 2012)
2017-10-20 19:48
239 查看
传送门
NOIP 2012 D2T2
题解:
二分答案(最早必须修改到的订单),差分维护前缀和,每次暴力check。复杂度O(nlog(n)),常数比线段树小,线段树加优化和卡常也能过。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=1e6+4;
int n,m,x[MAXN],y[MAXN],ans=0;
ll a[MAXN],d[MAXN],sum[MAXN];
inline int read() {
int x=0;char c=getchar();
while (c<'0'||c>'9') c=getchar();
while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
return x;
}
inline bool cck(int mid) {
ll cur=0;
memset(sum,0,sizeof(sum));
for (register int i=1;i<=mid;++i) sum[x[i]]+=d[i],sum[y[i]+1]-=d[i];
for (register int i=1;i<=n;++i) {
cur+=sum[i];
if (cur>a[i]) return false;
}
return true;
}
int main() {
// freopen("P1083.in","r",stdin);
n=read(),m=read();
for (register int i=1;i<=n;++i) a[i]=read();
for (register int i=1;i<=m;++i) d[i]=read(),x[i]=read(),y[i]=read();
int l=1,r=n;
while (l<=r) {
int mid=(l+r)>>1;
if (cck(mid)) l=mid+1;
else ans=mid,r=mid-1;
}
if (!ans) puts("0");
else printf("%d\n%d\n",-1,ans);
return 0;
}
NOIP 2012 D2T2
题解:
二分答案(最早必须修改到的订单),差分维护前缀和,每次暴力check。复杂度O(nlog(n)),常数比线段树小,线段树加优化和卡常也能过。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=1e6+4;
int n,m,x[MAXN],y[MAXN],ans=0;
ll a[MAXN],d[MAXN],sum[MAXN];
inline int read() {
int x=0;char c=getchar();
while (c<'0'||c>'9') c=getchar();
while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
return x;
}
inline bool cck(int mid) {
ll cur=0;
memset(sum,0,sizeof(sum));
for (register int i=1;i<=mid;++i) sum[x[i]]+=d[i],sum[y[i]+1]-=d[i];
for (register int i=1;i<=n;++i) {
cur+=sum[i];
if (cur>a[i]) return false;
}
return true;
}
int main() {
// freopen("P1083.in","r",stdin);
n=read(),m=read();
for (register int i=1;i<=n;++i) a[i]=read();
for (register int i=1;i<=m;++i) d[i]=read(),x[i]=read(),y[i]=read();
int l=1,r=n;
while (l<=r) {
int mid=(l+r)>>1;
if (cck(mid)) l=mid+1;
else ans=mid,r=mid-1;
}
if (!ans) puts("0");
else printf("%d\n%d\n",-1,ans);
return 0;
}
相关文章推荐
- 洛谷Luogu-1083 借教室(NOIP提高组2012 day2 t2)(详) HQG_AC的博客
- 【NOIP2012】【CJOJ1093】【洛谷1083】借教室
- luogu1083【2012提高】借教室(二分答案+差分前缀和)
- 洛谷 1083 [NOIP2012] 借教室 二分
- 【NOIP2012】【CJOJ1093】【洛谷1083】借教室
- LuoguP1083 借教室[NOIP2012] 解题报告【二分答案+差分】
- 洛谷 1083||NOIP 2012 借教室 二分答案+差分 解题报告
- 二分查找or线段树(借教室洛谷1083vijos1782NOIP 2012 提高组 第二天 第二题)
- P2075 [NOIP2012T5]借教室 区间更新+二分查找
- [NOIP2012 TG] 借教室
- noip2012借教室
- NKOJ-1887 借教室 【NOIP2012 day2】
- NOIP2012 D2 T2 借教室 线段树 OR 二分法
- vijos1782——借教室(noip2012)
- Luogu 1081 【NOIP2012】开车旅行 (链表,倍增)
- 【学术篇】NOIP2016 D1T3 luogu1850换教室
- 【codevs1217】【noip2012提高day2T2】借教室——线段树做法
- [noip2012]借教室
- noip2012 借教室 (线段树区间减、区间最小)
- [NOIP2012][二分][差分序列]借教室