AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 校园
  • 应用
  • 文章
    • 题解
    • 分享
    • 问答
  • 吐槽
  • 登录/注册

AcWing 1238. 日志统计(双指针与暴力)    原题链接    中等

作者: 作者的头像   qiao ,  2022-01-23 19:26:37 ,  所有人可见 ,  阅读 42


0


C++ 代码

#include<bits/stdc++.h>
using namespace std;

#define x first 
#define y second
typedef pair<int, int> PII;
const int N = 1e5 + 10;

PII logs[N];
int vis[N];
int cnt[N];

int main()
{
    int n, d, k; cin >> n >> d >> k;
    for (int i = 0; i < n; i++)
    {
        int ts,id; scanf("%d%d",&ts,&id);
        logs[i] = { ts,id };
    }
    sort(logs, logs + n);

    for (int i = 0, j = 0; j < n; j++)
    {
        int id = logs[j].y;
        cnt[id]++;
        //通过双指针优化至O(n)
        //当区间大于题意时:减去最左侧区间直至符合题意
        while (logs[j].x - logs[i].x + 1 > d)
        {
            cnt[logs[i].y]--;
            i++;
        }
        if (cnt[id] >= k)vis[id] = 1;
        //O(n^2)做法
    /*  for (int j = i; j < n; j++)
        {
            if (logs[j].x - logs[i].x + 1 > d)break;
            if (logs[j].y == id)
            {
                cnt++;
                if (cnt >= k)vis[logs[i].y] = 1;
            }
        }*/
    }
    for (int i = 0; i <= 100000; i++)if (vis[i])printf("%d\n", i);
}

0 评论

你确定删除吗?
1024
x

© 2018-2022 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息