0
点赞
收藏
分享

微信扫一扫

The Preliminary Contest for ICPC Asia Xuzhou 2019 B.so easy 数据结构 MaP

yongxinz 2022-06-29 阅读 20

​​传送门​​​ 题意:如果是操作1,那么就标记这个x点不可用;
如果是操作2,那么就查询该点第一个可用的数,包括这个点。
思路:这个题实际上就是让你将不可用的点做标记,并输出指定的点,可以建立一个Map函数(跟大佬学习的),map<int,int>m可以用左边的数表示右边的, 比如m[x]=1; 用1来表示x.
ps:m.count(x)是用来表示x在map中出现了几次。
这个题要用scanf/printf.并且要用c++11,否则容易超时。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<cmath>
#include<cctype>
#include<stack>
#include<map>
#include<string>
#include<cstdlib>
//#define ll long long
#define N 100010
using namespace std;
//const ll maxn = 1000000 + 5;
//const ll mod= 1e9+7;
//ll b[maxn];
//ll vis[maxn], Bool[maxn];
//ll a[maxn];
//ll ai[maxn],a[maxn],num[maxn],sum[maxn];
using namespace std;
map<long long ,long long >m;//1表示f(x)
int main()
{
long long n,v,V;
long long u;
scanf("%lld%lld",&n,&V);
for(long long i=0;i<V;i++)
{
scanf("%lld%lld",&u,&v);
if(u==1)
m[v]=1;//1代表v[2]
else
if(u==2)
{
if(!m.count(v))
printf("%lld\n",v);
else {
for(long long i=v+1;i<=n;i++)
{
if(!m.count(i))
{
printf("%lld\n",i);
break;
}
}
}
}
}
return 0;
}

练习代码

#include <bits/stdc++.h>
#define ll long long
const int maxn = 1e5 + 5;
using namespace std;
char a[105][105];
map<int,int>cnt;
int main()
{
int n,N;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>N;
cnt[N]=1;
}
for(int i=0;i<n;i++)
if(cnt.count(i))
cout<<i<<endl;
return 0;
}


举报

相关推荐

0 条评论