阿坤老师的独特瓷器

#include <bits/stdc++.h>

using namespace std;

struct Node{
    int d, h;
    bool operator <(const Node &n) const {
        if(d != n.d){
            return d < n.d;
        }
        return h > n.h;
    }
}q[100010];

int main(){
    int n;
    cin >> n;
    for(int i = 1; i <= n; i ++ ){
        cin >> q[i].d >> q[i].h;
    }
    sort(q + 1, q + 1 + n);
    set<int> s;
    s.insert(q[n].h);
    int ans = 0; // 不合法 
    for(int i = n - 1; i >= 1; i -- ){
        if(s.upper_bound(q[i].h) != s.end()){
            ans ++;
        }
        s.insert(q[i].h);
    }
    cout << n - ans;
    return 0;
}

阿坤老师的课堂挑战

#include <bits/stdc++.h>

using namespace std;

struct Node{
    int l, r;
    long long x; // java: Long python:无所谓 
}q[100010];

long long d[100010];
long long a[100010];

int main(){
    int n, m;
    cin >> n >> m;
    for(int i = 1; i <= m; i ++ ){
        cin >> q[i].l >> q[i].r >> q[i].x;
        d[q[i].l] += q[i].x;
        d[q[i].r + 1] -= q[i].x;
    }
    for(int i = 1; i <= n; i ++ ){
        a[i] = a[i - 1] + d[i];
    }
    long long maxv = 0;
    int pos;
    for(int i = 1; i <= n; i ++ ){
        if(maxv < a[i]){
            maxv = a[i];
            pos = i;
        }
    }
    long long ans = 0;
    for(int i = 1; i <= m; i ++ ){
        if(q[i].l <= pos && q[i].r >= pos){
            ans = max(ans, q[i].x);
        }
    }
    cout << maxv - ans;
    return 0;
}

0 条评论

目前还没有评论...