1 条题解
-
1
思维 + 诈骗差分 只要找出关键条件即可
题目要求 : 而每次开会 , 都会给你一个区间, 在这个区间的数 , 要么加一 , 要么减一
输出每次开完会之后 , 所有工作中 , 工作量最大的工作的工作量
结合以上两个判断, 我们只需要找出工作量最大的工作的工作量, 让后每次开会时判断他的加减情况
#include<bits/stdc++.h> // #define int long long #define endl '\n' #define INF 0x3f3f3f3f3f using namespace std; const int N = 2e5 + 9; void solve() { int n , k ; cin >> n >> k; int ma = -1; for(int i = 1;i <= n;i ++){ int x ; scanf("%d", &x); ma = max(ma, x); /* 找到最大值 */ } int x , y; while(k --){ char f; scanf(" %c", &f);/* 写入判断符号, 记得前吃空格, 否则无法正常判断 */ scanf("%d%d", &x, &y);/* 写入每次修改的数范围 */ /* 正式开始判断 题目要求是:每次开会后, 输出工作量最大任务的工作量 故 我们经过思考可以得出 只用判断 最大值每次是否被修改 */ if(f == '+'){ if(x <= ma && ma <= y) ma ++; /* 如果最大值在被修改值的范围之内 + 1 */ } else{ if(x <= ma && ma <= y) ma --; /* 如果最大值在被修改值的范围之内 - 1 */ } printf("%d ", ma); } printf("\n") ; } signed main() { int t = 1; cin >> t; while(t --) solve(); return 0; }
- 1
信息
- ID
- 1069
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 115
- 已通过
- 10
- 上传者