zoukankan      html  css  js  c++  java
  • [NOIP2012]借教室

    比换教室不知道低到哪里去了。

    就二分一下第一个不满足的人,然后维护一个差分数组,diff[s[i]]+=d[i],diff[t[i]+1]-=d[i],然后把diff加起来,判断一下是否rest<现在的即可。

    时间复杂度nlogn,就水过了。。。

    #include <iostream>
    #include <algorithm>
    #include <cmath>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    const int N=1000005;
    int n,rest[N],d[N],s[N],t[N],dif[N],m;
    bool ck(int x) {
        memset(dif,0,sizeof dif);
        for(int i=1;i<=x;i++) dif[s[i]]+=d[i],dif[t[i]+1]-=d[i];
        for(int i=1;i<=n;i++) dif[i]+=dif[i-1];
        for(int i=1;i<=n;i++) if(dif[i]>rest[i]) return 0;
        return 1;
    }
    int main() {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) scanf("%d",&rest[i]);
        for(int i=1;i<=m;i++) scanf("%d%d%d",&d[i],&s[i],&t[i]);
        if(ck(m)){puts("0");return 0;}
        int l=1,r=m,ans=0;
        while(l<r) {
            int mid=l+r>>1;
            if(ck(mid)) {ans=mid+1,l=mid+1;}
            else r=mid;
        }
        cout<<"-1
    "<<l<<endl;
    }
    借教室
    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    SSM框架的基本配置
    Python开发的飞机打外星人小游戏
    python中count和index
    破解Xmind时长
    光流法简介
    Linux常用命令
    GitHub常用命令
    极大似然估计与最大后验概率估计
    在linux上加速git clone
    Endnote导入共享数据
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9670227.html
Copyright © 2011-2022 走看看