我介绍一下我的算法,很明显我们打一个差分数组dif,然后按顺序就算差分数组dif前缀和,即为总共借出去的教室,当算到某一个借出去的教室数量大于那天的教室数量,输出-1并且停止计算,我们就知道在这一天,不符合情况,那么我们从头遍历订单,如果订单中借教室的天数包含该天,我们就减去借出去的教室,当减到小于0时,停止运算,该订单就是第一个不满足的订单号, 我是把全部订单的差分全部差分加起来了,相当于我考虑的全局情况,但我第二次遍历订单时,只考虑的局部情况就输出答案了
由此可以得出更多的hack数据,建议把样例添加为hack数据
#include<iostream>
using namespace std;
const int nnu=1000000+9;
int n,m,d[nnu],l[nnu],r[nnu],ju=0;
int dif[nnu]={0},sumdif[nnu]={0},room[nnu],froom[nnu];
int main(void)
{
cin>>n>>m;
for(int a=1;a<=n;a++)cin>>room[a],froom[a]=room[a];
for(int a=1;a<=m;a++)
cin>>d[a]>>l[a]>>r[a],dif[l[a]]-=d[a],dif[r[a]+1]+=d[a];
for(int a=1;a<=n;a++)
{
sumdif[a]=dif[a]+sumdif[a-1];
room[a]+=sumdif[a];
if(room[a]<0)
{
cout<<-1<<endl;
int tem=froom[a];
for(int i=1;i<=m;i++)
{
if(a>=l[i]&&a<=r[i])tem-=d[i];
// cout<<tem<<endl;
if(tem<0)
{
cout<<i;
return 0;
}
}
}
}
cout<<0;
return 0;
}