6 solutions

  • 1
    @ 2026-2-3 10:39:28

    https://lizikid.top/p/A1574

    题目传送门

    思路:

    E=mc2E=mc²

    AC CODE:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    long long r[N],d[N],s[N],t[N];
    int n,m;
    long long b[N];
    bool check(int k)
    {
        for(int i=1;i<=n;i++)
        {
            b[i]=r[i]-r[i-1];
        }
        for(int i=1;i<=k;i++)
        {
            b[s[i]]-=d[i];
            b[t[i]+1]+=d[i];
        }
        long long res=0;
        for(int i=1;i<=n;i++)
        {
            res+=b[i];
            if(res<0)
            {
                return 1;
            }
        }
        return 0;
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            cin>>r[i];
        }
        for(int i=1;i<=m;i++)
        {
            cin>>d[i]>>s[i]>>t[i];
        }
        int l=1,r=m;
        while(l<r)
        {
            int mid=l+r>>1;
            if(check(mid))
            {
                r=mid;
            }
            else
            {
                l=mid+1;
            }
        }
        if(check(r))
        {
            cout<<-1<<endl<<r;
        }
        else
        {
            cout<<0;
        }
        return 0;
    }
    

    肯定得全分

    • 1
      @ 2025-5-4 14:21:07
      
      10 10
      42323424 633675939 990396626 965164370 965164370 965164370 972489810 619351082 619351082 0
      586780256 2 9
      316471206 3 7
      42323424 1 3
      8081621 3 9
      36667522 3 7
      110729 3 6
      4572259 2 9
      7436169 7 9
      3834281 3 9
      8646496 4 9
      
      
      • 1
        @ 2024-7-27 11:10:12
        #include<bits/stdc++.h>
        using namespace std;
        typedef long long LL;
        const int N=1e7+10;
        int n,m;
        int r[N],d[N],s[N],t[N];
        LL b[N];
        bool check(int k)
        {
        	for(int i=1;i<=n;i++)  //计算差分 
            {
                b[i]=r[i]-r[i-1];
            }
        	for(int i=1;i<=k;i++) //处理前k个任务 
            {
        		b[s[i]]-=d[i];
        		b[t[i]+1]+=d[i];
        	}
        	LL res=0;
        	for(int i=1;i<=n;i++)
            {
        		res+=b[i];
        		if(res<0) return true; //某一天的任务不够 
        	}
        	return false; //任务可以满足 
        }
        int main()
        {
        	scanf("%d%d",&n,&m);
        	for(int i=1;i<=n;i++) 
            {
                scanf("%d",&r[i]); //r[i]可以使用的教室数量 
            }
        	for(int i=1;i<=m;i++) 
            {
                scanf("%d%d%d",&d[i],&s[i],&t[i]); //获取第i个任务的个数,起点,终点 
            }
        	int l=1,r=m;
        	while(l<r) //枚举当前的任务个数 
            {
        		int mid=l+r>>1;
        		if(check(mid)) r=mid; //1...mid个任务不能满足 
        		else l=mid+1; //1...mid可以满足 
        	}
        	if(check(r)) printf("-1 \n%d",r);
        	else printf("0");
        	return 0;
        }
        
        
        
        • 0
          @ 2024-7-27 11:40:17
          #include<bits/stdc++.h>
          using namespace std;
          typedef long long LL;
          const int N=1e7+10;
          int n,m;
          int r[N],d[N],s[N],t[N];
          LL b[N];
          bool check(int k)
          {
          	for(int i=1;i<=n;i++)  //计算差分
             {
                b[i]=r[i]-r[i-1];
             }
          	for(int i=1;i<=k;i++) //处理前k个任务
             {
          		b[s[i]]-=d[i];
          		b[t[i]+1]+=d[i];
          	}
          	LL res=0;
          	for(int i=1;i<=n;i++)
             {
          		res+=b[i];
          		if(res<0)
                {
                   return true; //某一天的任务不够
                }
          	}
          	return false; //任务可以满足
          }
          int main()
          {
          	cin>>n>>m;
          	for(int i=1;i<=n;i++) 
             {
                cin>>r[i]; //r[i]可以使用的教室数量
             }
          	for(int i=1;i<=m;i++) 
             {
                cin>>d[i]>>s[i]>>t[i]; //获取第i个任务的个数,起点,终点
             }
          	int l=1,r=m;
          	while(l<r) //枚举当前的任务个数
             {
          		int mid=l+r>>1;
          		if(check(mid))
                {
                   r=mid; //1...mid个任务不能满足
                }
          		else
                {
                   l=mid+1; //1...mid可以满足
                } 
          	}
          	if(check(r))
             {
                cout<<-1<<endl<<r;
             }
          	else
             {
                cout<<0;
             }
          	return 0;
          }
          
          • -2
            @ 2024-7-12 10:04:33
            #include<bits/stdc++.h>
            using namespace std;
            typedef long long LL;
            const int N=1e7+10;
            int n,m;
            int r[N],d[N],s[N],t[N];
            LL b[N];
            bool check(int k)
            {
            	for(int i=1;i<=n;i++) 
                {
                    b[i]=r[i]-r[i-1];
                }
            	for(int i=1;i<=k;i++)
                {
            		b[s[i]]-=d[i];
            		b[t[i]+1]+=d[i];
            	}
            	LL res=0;
            	for(int i=1;i<=n;i++)
                {
            		res+=b[i];
            		if(res<0) return true;
            	}
            	return false;
            }
            int main()
            {
            	scanf("%d%d",&n,&m);
            	for(int i=1;i<=n;i++) 
                {
                    scanf("%d",&r[i]);
                }
            	for(int i=1;i<=m;i++) 
                {
                    scanf("%d%d%d",&d[i],&s[i],&t[i]);
                }
            	int l=1,r=m;
            	while(l<r)
                {
            		int mid=l+r>>1;
            		if(check(mid)) r=mid;
            		else l=mid+1;
            	}
            	if(check(r)) printf("-1 \n%d",r);
            	else printf("0");
            	return 0;
            }
            
            
            • -3
              @ 2024-4-17 18:57:48
              #include<bits/stdc++.h>
              using namespace std;
              typedef long long LL;
              const int N=1e7+10;
              int n,m;
              int r[N],d[N],s[N],t[N];
              LL b[N];
              bool check(int k)
              {
              	for(int i=1;i<=n;i++) 
                  {
                      b[i]=r[i]-r[i-1];
                  }
              	for(int i=1;i<=k;i++)
                  {
              		b[s[i]]-=d[i];
              		b[t[i]+1]+=d[i];
              	}
              	LL res=0;
              	for(int i=1;i<=n;i++)
                  {
              		res+=b[i];
              		if(res<0) return true;
              	}
              	return false;
              }
              int main()
              {
              	scanf("%d%d",&n,&m);
              	for(int i=1;i<=n;i++) 
                  {
                      scanf("%d",&r[i]);
                  }
              	for(int i=1;i<=m;i++) 
                  {
                      scanf("%d%d%d",&d[i],&s[i],&t[i]);
                  }
              	int l=1,r=m;
              	while(l<r)
                  {
              		int mid=l+r>>1;
              		if(check(mid)) r=mid;
              		else l=mid+1;
              	}
              	if(check(r)) printf("-1 \n%d",r);
              	else printf("0");
              	return 0;
              }
              
              • 1

              Information

              ID
              198
              Time
              1000ms
              Memory
              256MiB
              Difficulty
              5
              Tags
              # Submissions
              40
              Accepted
              12
              Uploaded By