首页 > 其他分享 >国旗计划 省选

国旗计划 省选

时间:2024-01-27 20:33:38浏览次数:15  
标签:国旗 const 化圆 省选 rhs int 计划 go

SCOI2015 省选] 国旗计划

1_280.png

手搓 模拟的数据

这题做重要的 首先是 有化圆为链的思想,讲给的区间 化为链式,也就是说讲 l > r的地方的r + m ,相当于 多走了一圈,所以需要 将环复制一遍 ,在加倍身长为 一条链;

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int go[N][20];//倍增数组, go[s][i]表示从s区间开始 跳2^i步的区间;
int res[N]; // 记录答案;
int n , m;

struct edge
{
    int id;
    int l;
    int r;
    bool operator < (const edge & rhs) const
    {
        if(l != rhs.l) return l < rhs.l;
        return r < rhs.r;
    }
}w[N];

void pre()
{
    for(int i = 1 , p = i ; i <= n * 2 ; i ++)
    {
        while(p <= n * 2 && w[p].l <= w[i].r) p ++;
        
        go[i][0] = p - 1; //如果不-1那么这个p不符合上面的这个条件;
    }
    
    for(int i = 1 ; i < 20 ; i ++)
    {
        for(int j = 1 ; j <= n * 2 ; j ++)
        {
            go[j][i] = go[go[j][i - 1]][i - 1];
        }
    }
}

void query(int k)
{
    int len = w[k].l + m;
    int ans = 1;
    int p = k;
    
    for(int i = 19 ; i >= 0 ; i --)
    {
        if(go[k][i] != 0 && w[go[k][i]].r < len)
        {
            ans += (1 << i);
            k = go[k][i];
        }
    }
    res[w[p].id] = ans + 1; // 因为上面是 < len 所以还达不到 , 所以需要再加上最后一个人;
}

int main()
{
    cin >> n >> m;
    
    for(int i = 1 ; i <= n ; i ++) //进行拆圆化为链式;
    {
        cin >> w[i].l >> w[i].r;
        w[i].id = i;
        
        if(w[i].l > w[i].r) w[i].r += m;
    }
    
    sort(w + 1 , w + 1 + n);
    //复制环 加倍身长的代码,是化圆为链的核心代码;
    for(int i = 1 ; i <= n ; i ++)
    {
        w[i + n] = w[i];
        w[i + n].l += m;
        w[i + n].r += m;
    }
    
    pre(); //进行预处理;
    
    for(int i = 1 ; i <= n ; i ++) query(i); // 进行查询;
    
    for(int i = 1 ; i <= n ; i ++) cout << res[i] << " ";
    
    return 0;
}

标签:国旗,const,化圆,省选,rhs,int,计划,go
From: https://www.cnblogs.com/volapex-lord/p/17991886

相关文章

  • 国旗计划
    SCOI2015省选]国旗计划手搓模拟的数据这题做重要的首先是有化圆为链的思想,讲给的区间化为链式,也就是说讲l>r的地方的r+m,相当于多走了一圈,所以需要将环复制一遍,在加倍身长为一条链;#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;int......
  • 软件验收测试计划模板
    ......
  • 聚焦人力资源规划,实现财务计划与分析的转变
    当今市场经济的持续变化和不确定性使企业提前进入长期转型阶段。这些不确定因素和事件唤醒了企业对人力资源规划的需求,希望在管理常规业务和面临突如其来的变化时,能够第一时间进行调整、适应和发展。企业近年来一直利用一种新兴的规划方法——扩展规划和分析(xP&A)来应对这些挑战。xP......
  • loj 6095 花神的嘲讽计划 题解
    题目哈希记录每个\(k\)长度的串,询问的时候可以拿主席树或二分,这里说下二分。将\(n-k+1\)个串从小到大排序,以哈希值为第一关键字,序号为第二关键字。每次询问直接查找大于等于当前哈希值的位置即可,找到之后判断一下合不合法即可。具体看代码:#include<bits/stdc++.h>typede......
  • [转帖]一文搞懂各种数据库SQL执行计划:MySQL、Oracle等
    https://zhuanlan.zhihu.com/p/99331255 14人赞同了该文章MySQL执行计划Oracle执行计划SQLServer执行计划PostgreSQL执行计划执行计划(executionplan,也叫查询计划或者解释计划)是数据库执行SQL语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连......
  • 和鲸CEO范向伟入选2022年上海市东方英才计划创业项目领军创业人才
    1月17日下午,徐家汇环交大人工智能科创街区建设推进会在中银慧谷举行。本次活动由徐家汇街道党工委、办事处,徐汇区科学技术委员会和上海交大科技园有限公司共同主办,旨在进一步加强科技创新对区域高质量发展的支撑引领作用,围绕环交大特色产业内核,全面推进徐家汇环交大人工智能科创街......
  • 软件单元测试计划
    ......
  • Linux计划任务与日志的管理
    1、什么是计划任务我们可以通过一些设置来让电脑定时提醒我们该做什么事了,或者我们提前设置好,告诉电脑你几点做什么几点做什么,这种我们就叫它定时任务。而遇到一些需要执行的事情或任务。我们也可以通过命令来告诉电脑一会临时把这个工作给做一下在我们LINUX中,我们可以通过cront......
  • 寒假怎么制定学习计划高效?可以给自己制定学习计划的软件
    随着寒冬的降临,寒假也随之而至。对于中小学生和大学生们来说,这是一个放松身心、挖掘兴趣、提升学业的黄金时期。然而,众多学子纷纷表示,寒假在家中往往面临太多诱惑,难以按时完成每天的学习目标。那么如何应对这个问题呢?一款智能的学习计划制定软件或许可以成为解决之道。对于那些......
  • 故事补全计划
    以前年少时候看过的小说总是残缺不全,那些故事被切成了一段一段,如同琉璃碎瓦片。最近倒是又开始看起了杂书,把那些故事补全了。虽然不再有那些眼里有光的心气,但也没有完全消磨掉自己原来的样子。随笔就是随便写写,记下自己当下的感受,等以几百年后的人看到这段文字,他也能懂一个古代......