首页 > 其他分享 >整数区间

整数区间

时间:2024-04-08 16:37:21浏览次数:21  
标签:val int 整数 next 区间 now 500005 dis

原题链接

题解

1.设 \(f(i)\) 为 \([0,i]\) 区间内该有多少个数属于整数集 \(Z\)
则对于每一对输入的 \(x,y,c\) 都有 \(f[y]-f[x-1]>=c\) 而且 \(0<=f[i]-f[i-1]<=1\) 差分约束由此得来
又因为下标从零开始,而且我们需要建立超级源点,所以我们把 \(f\) 内的下标整体往右移两位

code

#include<bits/stdc++.h>
using namespace std;
int dis[500005]={0};
int in_q[500005]={0};
struct node
{
    int to,val;
};
vector<node> G[500005];
int main()
{

    int n;
    while(cin>>n)
    {
        for(int i=0;i<=50005;i++) G[i].clear();

    for(int i=1;i<=n;i++)
    {
        int x,y,c;
        cin>>x>>y>>c;
        G[x+1].push_back(node{y+2,c});
    }

    for(int i=1;i<=50005;i++)
    {
        G[0].push_back(node{i,0});
        G[i].push_back(node{i+1,0});
        G[i+1].push_back(node{i,-1});
    }

    for(int i=1;i<=50005;i++) dis[i]=-2e9;
    memset(in_q,0,sizeof in_q);
    queue<int> q;
    q.push(0);
    in_q[0]=1;
    dis[0]=0;
    while(q.size())
    {
        int now=q.front();
        q.pop();
        in_q[now]=0;
        for(auto next:G[now])
        {
            int to=next.to,val=next.val;
            if(val+dis[now]>dis[to])
            {
                dis[to]=val+dis[now];
                if(!in_q[to])
                {
                    q.push(to);
                    in_q[to]=1;
                }
            }
        }
    }

    int ans=0;
    for(int i=0;i<=50005;i++)
    {
        //if(i<20) printf("%d:%d\n",i-2,dis[i]);
        ans=max(ans,dis[i]-dis[1]);
    }
    cout<<ans<<endl;
    }

    return 0;
}

标签:val,int,整数,next,区间,now,500005,dis
From: https://www.cnblogs.com/pure4knowledge/p/18121612

相关文章

  • 1169: 大整数(指针专题)(c语言)
    题目描述输入3个大整数,位数不超过100位,按从小到大的顺序输出这三个整数。要求定义并使用如下函数比较两个大整数的大小。 intcmp(char*a,char*b) { //若大整数a大于b,返回1; //若a小于b,返回-1; //若a与b相等,返回0 }输入输入有3行,每行输入一个大整数,位数不超过1......
  • 1022: 三整数排序(c语言)
    题目描述从键盘输入三个整数x,y和z,按从大到小的顺序输出它们的值。输入输入三个整数x,y和z。输出按从大到小的顺序输出它们的值。样例输入 201618样例输出 201816#include<stdio.h>intmain(){ intx=0,y=0,z=0; scanf("%d%d%d",&x,&y,&z);......
  • 用C语言实现,找出一个整数数组中,第二大的数
    用C语言实现,找出一个整数数组中,第二大的数/********************************************************************* filename: * author :[email protected]* date :2024/04/07* function:找出一个整数数组中,第二大的数* note :None** Copy......
  • 关于浮点数转整数不准确问题
    #include<stdio.h>#include<string.h>#include<dirent.h>#include<sys/types.h>#include<sys/stat.h>#include<stdlib.h>#include<fcntl.h>#include<unistd.h>#include<iostream>usingnamespace......
  • LeetCode题练习与总结:插入区间--57
    一、题目描述示例 1:输入:intervals=[[1,3],[6,9]],newInterval=[2,5]输出:[[1,5],[6,9]]示例2:输入:intervals=[[1,2],[3,5],[6,7],[8,10],[12,16]],newInterval=[4,8]输出:[[1,2],[3,10],[12,16]]解释:这是因为新的区间[4,8]与[3,5],[6,7],[8,10] 重叠。......
  • P8600 [蓝桥杯 2013 省 B] 连号区间数 and CF526F
    问题转化很容易就能把原问题转化成:求满足Max-Min=r-l的区间个数暴力解法根据上面得到的性质,我们可以暴力枚举区间,来判断当前区间是否满足性质#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#include<string.h>#def......
  • 【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(八)- 向量整数算术指令
     1.引言以下是《riscv-v-spec-1.0.pdf》文档的关键内容:这是一份关于向量扩展的详细技术文档,内容覆盖了向量指令集的多个关键方面,如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量算术指令格式、向量整数和浮点算术指......
  • 2024-04-06:用go语言,给你两个非负整数数组 rowSum 和 colSum, 其中 rowSum[i] 是二维矩
    2024-04-06:用go语言,给你两个非负整数数组rowSum和colSum,其中rowSum[i]是二维矩阵中第i行元素的和,colSum[j]是第j列元素的和,换言之你不知道矩阵里的每个元素,但是你知道每一行和每一列的和。请找到大小为rowSum.lengthxcolSum.length的任意非负整数矩阵。且该......
  • 【LeetCode刷题记录】简单篇-13-罗马数字转整数
    【题目描述】 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如,罗马数字 2 写做 II ,即为两个并列的1。12 ......
  • LeetCode 13. 罗马数字转整数
    解题思路通过样例我们可以知道,将目标对应值和下一个目标对应值进行比较,如果小于,则sum=sum+目标对应值,如果大于,则sum=sum-目标对应值。最终的sum就是正确答案。相关代码classSolution{public:intromanToInt(strings){unordered_map<char,int>a;......