1238. 日志统计 双指针

Posted 幽殇默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1238. 日志统计 双指针相关的知识,希望对你有一定的参考价值。

1238. 日志统计 【双指针】


https://www.acwing.com/problem/content/1240/

#include<cstdio>
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
typedef pair<int,int> PII;
#define x first//时间
#define y second//id
const int N=100100;
PII P[N];
int cnt[N];
bool st[N];
int n,d,k;
int main(void)
{
	cin>>n>>d>>k;
	for(int i=0;i<n;i++) scanf("%d%d",&P[i].x,&P[i].y); 
	sort(P,P+n);//pair 会自动的按第一关键字排序,然后按第二关键字排序
	int i,j;
	for(i=0,j=0;i<n;i++)
	{
		int id=P[i].y; 
		cnt[id]++;
		while(P[i].x-P[j].x>=d)//说明时间超过了
		{
			cnt[P[j].y]--;//将最开始的剔除掉
			j++;//将下一个作为哨兵
		}
		if(cnt[id]>=k) st[id]=true;//是热贴
	} 
	for(int i=0;i<=100050;i++)
		if(st[i]) cout<<i<<endl;
	return 0; 
}

结构体写法:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
const int N=100100;
struct data
{
	int id;
	int t;
}Data[N];
bool cmp(data a,data b)
{
	return a.t<b.t;
}
bool st[N];
int ct[N];
int n,d,k;
int main(void)
{
	cin>>n>>d>>k;
	for(int i=0;i<n;i++) scanf("%d%d",&Data[i].t,&Data[i].id);
	sort(Data,Data+n,cmp); 
	int i,j;
	for(i=0,j=0;i<n;i++)
	{
		int temp=Data[i].id;
		ct[temp]++;
		while(Data[i].t-Data[j].t>=d)
		{
			ct[Data[j].id]--;
			j++; 
		} 
		if(ct[temp]>=k) st[temp]=true;
	}
	for(i=0;i<N;i++) if(st[i]) cout<<i<<endl;
	return 0;
} 
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=1e5+10;
int n,d,k,a[N];
vector<PII> ve;
map<int,int>mp;
int main(void)
{
    cin>>n>>d>>k;
    while(n--)
    {
        int t,id; cin>>t>>id;
        ve.push_back({t,id});
    }
    sort(ve.begin(),ve.end());
    for(int i=0,j=0;i<ve.size();i++)
    {
        a[ve[i].second]++;
        while(ve[i].first>=ve[j].first+d) 
        {
            a[ve[j].second]--,j++;
        }
        if(a[ve[i].second]>=k) mp[ve[i].second]++;
    }
    for(auto i=mp.begin();i!=mp.end();i++) cout<<i->first<<endl;
    return 0;
}

以上是关于1238. 日志统计 双指针的主要内容,如果未能解决你的问题,请参考以下文章

Chapter6双指针,BFS和图论

片段中的空指针异常

使用回收器适配器获取空指针

基础算法双指针

[leetcode] 2024. 考试的最大困扰度 | 双指针

双指针板子