1 条题解

  • 1
    @ 2024-11-18 15:49:48

    思维 + 诈骗差分 只要找出关键条件即可

    题目要求 : 而每次开会 , 都会给你一个区间, 在这个区间的数 , 要么加一 , 要么减一

    输出每次开完会之后 , 所有工作中 , 工作量最大的工作的工作量

    结合以上两个判断, 我们只需要找出工作量最大的工作的工作量, 让后每次开会时判断他的加减情况

    #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
    上传者