zoukankan      html  css  js  c++  java
  • 洛谷P3602 Koishi Loves Segments(贪心,multiset)

    洛谷题目传送门

    贪心小水题。

    把线段按左端点从小到大排序,限制点也是从小到大排序,然后一起扫一遍。

    对于每一个限制点实时维护覆盖它的所有线段,如果超过限制,则贪心地把右端点最大的线段永远删去,不计入答案。显然这样做对后面的决策更有利。

    以右端点为键值,需要资瓷动态插入,删除最小值、最大值,multiset就行了。

    代码很短,常数应该比较大,但不知为何暂时混了个rk1。

    #include<bits/stdc++.h>
    #define R register int
    #define G if(++ip==ie)if(fread(ip=buf,1,SZ,stdin))
    using namespace std;
    const int SZ=1<<19,N=4e5+9;
    char buf[SZ],*ie=buf+SZ,*ip=ie-1;
    inline int in(){
    	G;while(*ip<'-')G;
    	R f=*ip=='-';if(f)G;
    	R x=*ip&15;G;
    	while(*ip>'-'){x*=10;x+=*ip&15;G;}
    	return f?-x:x;
    }
    struct Seg{
    	int x,y;
    	inline bool operator<(const Seg&a)const{
    		return x<a.x;
    	}
    }a[N],b[N];
    multiset<int>s;
    int main(){
    	R n=in(),m=in(),ans=n;
    	for(R i=0;i<n;++i)a[i].x=in(),a[i].y=in();
    	for(R i=0;i<m;++i)b[i].x=in(),b[i].y=in();
    	sort(a,a+n);sort(b,b+m);
    	for(R i=0,j=0;i<m;++i){
    		while(j<n&&a[j].x<=b[i].x)s.insert(a[j++].y);
    		while(s.size()&&*s.begin()<b[i].x)s.erase(s.begin());
    		while(s.size()>b[i].y)s.erase(--s.end()),--ans;
    	}
    	return cout<<ans<<endl,0;
    }
    
  • 相关阅读:
    SAP GUI中按F1后显示的帮助窗口为空白
    SAP事务代码之IMG设置
    RFC 同步异步调用实例
    SAP R/3 与其他异构系统集成时是否需要应用 SAP XI
    SAP 用户管理事务代码
    SAP 模块中文解释
    SAP Table 类型
    SAP System Tables
    开发SAP的语言
    IDOC 创建,增强,管理,配置
  • 原文地址:https://www.cnblogs.com/flashhu/p/10573808.html
Copyright © 2011-2022 走看看