P1083 [NOIP2012 提高组] 借教室
-》d<=1e9 -> long long or 溢出
//d<=1e9 -> long long or 溢出 /* 4 3 2 5 4 3 2 1 3 3 2 4 4 2 4 -1 2 4 6 1000000000 1000000000 1000000000 1000000000 1000000000 1 4 1000000000 1 4 1000000000 1 4 1000000000 1 4 1000000000 1 4 1000000000 1 4 -1 2 */ #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<bits/stdc++.h> #define ll long long #define ddd printf("-----------------debug\n"); using namespace std; const int maxn=1e6+10; ll a[maxn],nd[maxn],dif[maxn],n,m,s[maxn],t[maxn],d[maxn]; ll pd_ok(int k) { memset(dif,0,sizeof(dif)); memset(nd,0,sizeof(nd)); for(int i=1;i<=k;i++){ dif[s[i]]+=d[i],dif[ t[i]+1 ]-=d[i];} for(int i=1;i<=n;i++) { nd[i]=nd[i-1]+dif[i]; if(nd[i]>a[i]) return 0; } return 1; } int main() { ios::sync_with_stdio(false); cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=m;i++) cin>>d[i]>>s[i]>>t[i]; if(pd_ok(m)) {cout<<"0"<<endl;return 0;} int l=1,r=m; while(l<r) { int mid=(l+r)>>1; if(pd_ok(mid)) l=mid+1;// else r=mid; } cout<<"-1"<<endl<<l<<endl; return 0; }

浙公网安备 33010602011771号