zoukankan      html  css  js  c++  java
  • 1672 区间交(贪心)

    1672 区间交
    1 秒 131,072 KB 40 分 4 级题

    思路:

    先按照区间左端点排序
    然后维护一个优先队列,存放右端点

    循环m个区间
    队列共三种操作

    • 把每个区间的右端点加入
    • 如果区间左端点>队列的值,弹出
    • size>k时,弹出至k个
    • 队列每次size为k时,计算区间的和,队列第一个-(当前左端点-1)取最大值

    代码:

    package _51_node.greedy;
    
    import java.util.Arrays;
    import java.util.PriorityQueue;
    import java.util.Scanner;
    
    public class ex_1672 {
        /**
         * 1672 区间交
         * 1 秒  131,072 KB 40 分 4 级题
         * @param args
         */
        public static void main(String[] args) {
            Scanner cin = new Scanner(System.in);
            int n, k, m, x;
            n = cin.nextInt();
            k = cin.nextInt();
            m = cin.nextInt();
            long[] sum = new long[n+1];
            PriorityQueue<Integer> q = new PriorityQueue<>();
            Pair[] pair = new Pair[m];
            for (int i = 1; i <= n; i++) {
                x = cin.nextInt();
                sum[i] = sum[i - 1] + x;
            }
            for (int i = 0; i < m; i++) {
                pair[i] = new Pair(cin.nextInt(), cin.nextInt());
            }
            Arrays.sort(pair);
            long ans = 0;
            for (int i = 0; i < m; i++) {
                q.add(pair[i].r);
                while (!q.isEmpty()) { //剔除没有相交区域的
                    if (q.peek() < pair[i].l) q.poll();
                    else break;
                }
                while (q.size() > k) q.poll();//去除小区间
                if (q.size() == k) ans = Math.max(ans, sum[q.peek()] - sum[pair[i].l-1]);
            }
            System.out.println(ans);
        }
    
        static class Pair implements Comparable<Pair> {
            int l;
            int r;
    
            public Pair(int l, int r) {
                this.l = l;
                this.r = r;
            }
    
            @Override
            public int compareTo(Pair o) {
                if (l > o.l) return 1;
                return -1;
            }
        }
    }
    
    
  • 相关阅读:
    打开XX.etl文件
    ubuntu 安装 openssh-server,xinetd,vmware tools
    ESXi时间同步
    常用正则表达式字符说明
    RPC 服务器不可用
    linux 常用命令
    解决RDP连接不上
    python数据持久存储-pickle模块
    lambda表达式/对象引用计数
    关闭网络打开远程文件时防火墙安全弹窗
  • 原文地址:https://www.cnblogs.com/somliy/p/10018540.html
Copyright © 2011-2022 走看看