1238. 日志统计

在这里插入图片描述
在这里插入图片描述
思路:
利用双指针算法,用j指向开头,i指向结尾,然后不断右移,每次只变化一个
在这里插入图片描述
代码:

# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std;

# define x first
# define y second

const int N = 100010;

int n,d,k;
typedef pair<int,int> PII;
PII logs[N];
int cnt[N];
bool st[N];

int main()
{
    
    
    scanf("%d %d %d",&n,&d,&k);
    for(int i = 0;i < n;i++)
    {
    
    
        scanf("%d %d",&logs[i].x,&logs[i].y);
    }
    sort(logs,logs + n);
    for(int i = 0,j = 0;i < n;i++)
    {
    
    
        int id = logs[i].y;
        cnt[id]++;
        //i点在不断的往前走,直到i减去j的距离大于d时,就去掉在j的时候获得的赞,然后j往前走一步
        while(logs[i].x - logs[j].x >= d)/
        {
    
    
            cnt[logs[j].y]--;
            j++;
        }
        if(cnt[logs[i].y] >= k)
        {
    
    
            st[logs[i].y] = true;
        }
    }
    for(int i = 0;i < N;i++)
    {
    
    
        if(st[i] == true)
        {
    
    
            printf("%d\n",i);
        }
    }
    
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45812180/article/details/114988626