4444: [Scoi2015]国旗计划|贪心|倍增

由于没有区间被其它区间包括这个条件,也就是假设li<lj那么一定满足ri<rj,就能够贪心搞一搞了。

假如区间[l,r]都已经被覆盖,那么能够继续找一个li在[l,r]范围内的最大的一个,继续扩展覆盖的区间,然后再以相同的方式找下一个战士

这样能够依照左端点排序,然后每个战士要找的下一个战士都是确定的,然后用倍增找出一共须要多少战士就能够了

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#define ll long long
#define N 402020
#define pa pair<int,int>
using namespace std;
int sc()
{
    int i=0,f=1; char c=getchar();
    while(c>‘9‘||c<‘0‘){if(c==‘-‘)f=-1;c=getchar();}
    while(c>=‘0‘&&c<=‘9‘)i=i*10+c-‘0‘,c=getchar();
    return i*f;
}
struct W{int l,r,p;}a[N];
int n,m,tot,fa[N][19],ans[N];
set<pa>st;
bool cmp(W a,W b)
{
    return a.l<b.l;
}
void solve(int x)
{
    int p=a[x].p,L=a[x].l+m;
    for(int i=18;i>=0;i--)
        if(fa[x][i])
            if(a[fa[x][i]].r<L)
                x=fa[x][i],ans[p]+=(1<<i);
}
int main()
{
    n=sc(),m=sc();
    for(int i=1;i<=n;i++)
    {
        a[++tot].l=sc(),a[tot].r=sc(),a[tot].p=i;
        if(a[tot].r<a[tot].l)a[tot].r+=m;
        ++tot;
        a[tot].l=a[tot-1].l+m;
        a[tot].r=a[tot-1].r+m;
    }
    sort(a+1,a+tot+1,cmp);
    st.insert(make_pair(a[tot].l,tot));
    for(int i=tot-1;i;i--)
    {
        fa[i][0]=(--st.upper_bound(make_pair(a[i].r,0x7FFFFFFF)))->second;
        st.insert(make_pair(a[i].l,i));
    }
    for(int i=1;i<=18;i++)
        for(int j=tot;j;j--)
            fa[j][i]=fa[fa[j][i-1]][i-1];
    for(int i=1;i<=tot;i++)
        if(a[i].p)
            solve(i);
    for(int i=1;i<=n;i++)
        printf("%d ",ans[i]+2);
    return 0;
}
时间: 2024-10-13 23:35:05

4444: [Scoi2015]国旗计划|贪心|倍增的相关文章

4444: [Scoi2015]国旗计划

4444: [Scoi2015]国旗计划 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 485  Solved: 232 Description A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这 项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名优秀的边防战上作为这 项计划的候选人. A国幅员辽阔,边境线上设有M个边防站,顺时针编号1至M.每名边防战士常驻两个边防站,并且善于

【BZOJ4444】[Scoi2015]国旗计划 双指针+倍增

[BZOJ4444][Scoi2015]国旗计划 Description A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名优秀的边防战上作为这项计划的候选人. A国幅员辽阔,边境线上设有M个边防站,顺时针编号1至M.每名边防战士常驻两个边防站,并且善于在这两个边防站之间长途奔袭,我们称这两个边防站之间的路程是这个边防战士的奔袭区间.n名边防战士都是精心挑选的,身体素质极佳,所以

[SCOI2015]国旗计划

题目描述 A 国正在开展一项伟大的计划 -- 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 N 名优秀的边防战上作为这项计划的候选人. A 国幅员辽阔,边境线上设有 M 个边防站,顺时针编号 1 至 M . 每名边防战士常驻两个边防站,并且善于在这两个边防站之间长途奔袭,我们称这两个边防站之间的路程是这个边防战士的奔袭区间. N名边防战士都是精心挑选的,身体素质极佳,所以每名边防战士的奔袭区间都不会被其他边

BZOJ4444 : [Scoi2015]国旗计划

首先将坐标离散化,因为区间互不包含,可以理解为对于每个起点输出最少需要多少个战士. 将环倍长,破环成链,设$f[i]$表示区间左端点不超过$i$时右端点的最大值,可以通过$O(n)$递推求出. 那么如果将$f[i]$看成$i$的祖先的话,它实际上形成了一棵以$2n$为根的树. 首先暴力计算出1号点的答案$t$,设$L=t-1$. 然后dfs这棵树,用一个栈按深度依次保存每个点到根路径上的点. 对于一个点,只需要从$L$开始暴力枚举答案,然后$O(1)$检验即可. 因为每个点的答案相差不超过1,所

LibreOJ #2007. 「SCOI2015」国旗计划

二次联通门 : LibreOJ #2007. 「SCOI2015」国旗计划 --by Claris /* LibreOJ #2007. 「SCOI2015」国旗计划 跪膜Claris... */ #include <cstdio> #include <iostream> #include <algorithm> const int BUF = 12312312; char Buf[BUF], *buf = Buf; inline void read (int &

AC日记——「SCOI2015」国旗计划 LiBreOJ 2007

#2007. 「SCOI2015」国旗计划 思路: 跪烂Claris 代码: #include <cstdio> #include <algorithm> #define maxn 800010 int n,m,ai[maxn][2],bi[maxn],f[maxn<<1],st[maxn]; int g[maxn],nxt[maxn<<1],q[maxn<<1],t,ans[maxn],L,x,y,i; inline void in(int&a

国旗计划

题目:A 国正在开展一项伟大的计划 -- 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 N N 名优秀的边防战上作为这项计划的候选人. A 国幅员辽阔,边境线上设有 M M 个边防站,顺时针编号 1 1 至 M M.每名边防战士常驻两个边防站,并且善于在这两个边防站之间长途奔袭,我们称这两个边防站之间的路程是这个边防战士的奔袭区间. N N 名边防战士都是精心挑选的,身体素质极佳,所以每名边防战士的奔袭区间

CDOJ 1437 谭松松的旅游计划 Label:倍增LCA &amp;&amp; 最短路

谭松松的旅游计划 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 谭松松是一个爱旅游的人,他非常的热爱旅游,即便身体被掏空也要坚持旅游.喵蛤王国由N个城市组成,由N-1条道路连通,每条道路长度为ci,使得任意两座城市都能相互到达.谭松松有M个旅游计划,每个旅游计划有一个起点ai,一个终点bi,所以谭松松想知道,对于每个旅游计划,从起点到终点的最短路长

(贪心+倍增求LCA) hdu 4912

Paths on the tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1097    Accepted Submission(s): 366 Problem Description bobo has a tree, whose vertices are conveniently labeled by 1,2,…,n. T