- 题解
蓝桥杯萌新赛难题
- 2023-9-25 23:42:26 @
阿坤老师的独特瓷器
#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 条评论
目前还没有评论...