合影~(差分?)

简介: 合影~(差分?)

29.png

30.png


解题思路:先给N个人身高都赋值为H,即先把每个人的身高最大值定为H,然后用循环结构,在循环结构里判断a,b的大小,然后将处在a,b中间的人的身高-1,这样循环M次,最后输出N个人的最大身高

(最后要去重)

以下是两种方法,一种是结构体去重(有两种,一个是手写函数去重,一个是用map函数),一个是二维数组去重。

#include <bits/stdc++.h>
using namespace std;
int book[10005][10005] = {0};
struct dui
{
    int i;
    int j;
}arr[10005];
bool cmp(dui x,dui y)
{
    if(x.i == y.i)
        return x.j < y.j;
    return x.i < y.i;
}
int unique(int m)
{
   int cnt = 0;
   for(int k = 1;k < m;k++)
   {
       if(arr[k].i != arr[cnt].i || arr[k].j != arr[cnt].j)
       {
           arr[++cnt] = arr[k];
       }
   }
   return cnt + 1;
}
int main()
{
    int n,p,h,m;
    cin>>n>>p>>h>>m;
    int ans[n + 10];
    for(int k = 1;k <= n;k++)
        ans[k] = h;
    for(int k = 0;k < m;k++)
    {
        cin>>arr[k].i>>arr[k].j;
    }
    sort(arr,arr+m,cmp);
    int len = unique(m);
    for(int k = 0; k < len ;++k)
    {
        if(arr[k].i > arr[k].j)
            swap(arr[k].i,arr[k].j);
        for(int q = arr[k].i+1;q < arr[k].j;q++)
        {
            ans[q] -= 1;
        }
    }
    for(int k = 1;k <= n;k++)
    {
        cout<<ans[k]<<endl;
    }
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,p,h,m,a,b;
map<pair<int,int>,bool>shu;
int main()
{
scanf("%d%d%d%d",&n,&p,&h,&m);
int cha[10005]={0};//差值
int qian[10005]={0};//前缀和
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
if(a>b)
swap(a,b);//交换,必须保证a是小的,b是大的
if(shu[make_pair(a,b)]==1)
continue;//去重,就直接返回去了。。
cha[a+1]--;
cha[b]++;
shu[make_pair(a,b)]=1;//标记为1就代表有这组数据了
}
for(int i=1;i<=n;i++)
{
qian[i]=qian[i-1]+cha[i];
printf("%d\n",h+qian[i]);
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int book[10005][10005] = {0};
typedef struct dui
{
    int i;
    int j;
}dui;
int main()
{
    int n,p,h,m;
    cin>>n>>p>>h>>m;
    int ans[n + 10];
    for(int k = 1;k <= n;k++)
        ans[k] = h;
    dui arr[m + 10];
    for(int k = 1;k <= m;k++)
    {
        cin>>arr[k].i>>arr[k].j;
    }
    for(int k = 1;k <= m;k++)
    {
        if(arr[k].i > arr[k].j)
            swap(arr[k].i,arr[k].j);
        if(book[arr[k].i][arr[k].j] == 0)
        {
            for(int q = arr[k].i+1;q < arr[k].j;q++)
            {
                ans[q] -= 1;
                book[arr[k].i][arr[k].j] += 1;
            }
        }
    }
    for(int k = 1;k <= n;k++)
    {
        cout<<ans[k]<<endl;
    }
    return 0;
}


相关文章
|
Kubernetes 监控 前端开发
Kubernetes 集群管理
8月更文挑战第26天
121 2
|
数据库
JSP+Servlet+JavaBean模式+实现登录注册
JSP+Servlet+JavaBean模式+实现登录注册
JSP+Servlet+JavaBean模式+实现登录注册
|
存储 自然语言处理 算法
elasticsearch集群搭建,以及kibana和ik分词器的安装(7.3.2)
elasticsearch集群搭建,以及kibana和ik分词器的安装(7.3.2)
|
Android开发
Android 中实现模拟搜索的功能详解
Android 中实现模拟搜索的功能详解
154 0
|
机器学习/深度学习 传感器 算法
【图像去噪】基于CTV-RPCA实现图像去噪和目标显著性检测附matlab代码
【图像去噪】基于CTV-RPCA实现图像去噪和目标显著性检测附matlab代码
|
存储 JavaScript 前端开发
【JavaScript】45_结构对象与对象的解构
# 1、解构对象 数组中可以存储任意类型的数据,也可以存数组, 如果一个数组中的元素还是数组,则这个数组我们就称为是二维数组 解构对象,方便两数交换数值;可以反向赋值对象,数组 可以在解构的同时,进行声明 ```html <script> const arr = ["孙悟空", "猪八戒", "沙和尚"] let a, b, c // a = arr[0] // b = arr[1] // c = arr[2] ; [a,b,
215 0
|
弹性计算 关系型数据库 MySQL
基于CentOS快速搭建LAMP环境笔记
基于CentOS快速搭建LAMP环境笔记
382 0
基于CentOS快速搭建LAMP环境笔记
|
JSON 文字识别 API
这些世界杯球星你真的认识吗?不如通过Python来认识一下吧
最近大家都在追看世界杯,博主也是一样,偶尔也贪黑看球,虽然踢得不怎么样,但是热情却很高。依稀记得小学的时候为了攒球星卡吃了无数袋的干脆面,什么巴西罗纳尔多,法国齐达内,各种球星,当然也都是因为热爱足球才含着泪吃进去的。
这些世界杯球星你真的认识吗?不如通过Python来认识一下吧
|
算法 大数据 程序员
自从掌握了软件开发的 5 条核心原则,我每天工作时至少可以多摸鱼 4 个小时
自从掌握了软件开发的 5 条核心原则,我每天工作时至少可以多摸鱼 4 个小时
268 0
自从掌握了软件开发的 5 条核心原则,我每天工作时至少可以多摸鱼 4 个小时