zoukankan      html  css  js  c++  java
  • 「二分答案 + 前缀和」防线

    防线

    题目链接:防线

    题目大意

    给你(n)件物品,每件物品 3 个信息,起点,终点,每次可以延伸的距离,从起点开始每一个延伸的距离上都会放一个物品,现在问你哪个位置上放的物品是奇数个

    题目题解

    挺裸的一道二分题,看了下题不好判断二分性,因为本题规定了最多只能出现一个奇数位,考虑用前缀,因为 奇数 + 偶数 = 奇数 那么就好判断了,如果当前位的前缀仍然是奇数,那么就向左,否则向右

    //#define fre yes
    
    #include <cstdio>
    #include <iostream>
    
    const int N = 2000005;
    struct Node {
        long long s, e, d;
    }a[N];
    
    int n;
    long long l, r;
    
    long long check(long long x) {
        long long ans = 0;
        for (int i = 1; i <= n; i++) {
            if(a[i].s <= x) {
                ans += (std::min(x, a[i].e) - a[i].s) / a[i].d + 1;
            }
        } return ans;
    }
    
    int main() {
        static int t;
        scanf("%d", &t);
        while(t--) {
            scanf("%d", &n);
            for (int i = 1; i <= n; i++) {
                scanf("%d %d %d", &a[i].s, &a[i].e, &a[i].d);
            }
    
            l = 0, r = (1 << 31) - 1;
            while(l < r) {
                long long mid = (l + r) >> 1;
                if(!(check(mid) & 1)) l = mid + 1;
                else r = mid;
            }
    
            long long ans = check(r) - check(r - 1);
            if(ans) {
                printf("%lld %lld
    ", l, ans);
            } else puts("There's no weakness.");
        } return 0;
    }
    
    
  • 相关阅读:
    Domino
    tomcat 部署 外网访问
    市场4
    android 源码下载编译
    SSIS
    代码审查工具
    mfc 常用控件
    屏蔽home
    MFC BEGIN_MESSAGE_MAP()
    社交产品
  • 原文地址:https://www.cnblogs.com/Nicoppa/p/11513091.html
Copyright © 2011-2022 走看看