TLE 求助
查看原帖
TLE 求助
749714
xyzfrozen楼主2023/10/31 09:21

TlE ont test 18

set 换成 vector mle 了

#include<bits/stdc++.h>
#define int long long
#define pt putchar(' ')
#define nl puts("")
#define pi pair<int,int>
#define go(it) for(auto &it:as[x])
using namespace std;

set<int> s;
map<int,int> lt;
map<int,set<pi>> Del;

int fr(){
    int x=0,flag=1;
    char ch=getchar();
    while(ch<'0' || ch>'9'){
        if(ch=='-') flag=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9'){
        x=x*10+(ch-'0');
        ch=getchar();
    }
    return x*flag;
}
void fw(int x){
	if(x<0) putchar('-'),x=-x;
    if(x>9) fw(x/10);
    putchar(x%10+'0');
}
int max(int a,int b){return a>b?a:b;}
int min(int a,int b){return a<b?a:b;}

int query(int x)
{
	if(!lt.count(x)) lt[x]=1;
	for(int i=lt[x];;i++)
	{
		if(!s.count(i*x)) {lt[x]=i;return i*x;}
		else Del[i*x].insert({x,i});
	}
}

void del(int x)
{
	if(s.count(x)) s.erase(x);
	for(auto it:Del[x])
		lt[it.first]=min(lt[it.first],it.second);
	Del[x].clear();
}

signed main()
{
	int T=fr();
	while(T--)
	{
		char op[2];
		int x;
		scanf("%s",op),x=fr();
		if(op[0]=='+') s.insert(x);
		else if(op[0]=='-') del(x);
		else fw(query(x)),nl;
	}

	return 0;
}
2023/10/31 09:21
加载中...