为什么是TLE而不是MLE(树状数组)
查看原帖
为什么是TLE而不是MLE(树状数组)
580608
lupengheyyds楼主2023/2/18 10:00

我用的树状数组,由于这道题要开二维的,数组直接CE,所以我用了unordered_map

#include<stdio.h>
#include<unordered_map>
using namespace std;
const int szl=3e5+5;
int a[szl];
unordered_map<unsigned int,unordered_map<unsigned int,int>>bitr;//hash式无敌 
int n,m;
void add(int col,int pos,int data){
	for(;pos<=n;pos+=pos&-pos)bitr[pos][col]+=data;
	return;
}
int ask(int col,int pos){
	int sum=0;
	for(;pos;pos-=pos&-pos){
		sum+=bitr[pos][col];
	}
	return sum;
}
int main(){ 
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",a+i);
		add(a[i],i,1);
	}
	for(int i=1;i<=m;i++){
		int op;scanf("%d",&op);
		if(op==1){
			int l,r,c;scanf("%d%d%d",&l,&r,&c);
			printf("%d\n",ask(c,r)-ask(c,l-1));
		}
		else{
			int x;scanf("%d",&x);
			add(a[x],x,-1);
			add(a[x+1],x,1);
			add(a[x+1],x+1,-1);
			add(a[x],x+1,1);
			swap(a[x],a[x+1]);
		}
	}
	return 0;
}

TLE\color{Blue}TLE 了!!! 这是提交记录

我想是不是被卡了所以换成了map

#include<stdio.h>
#include<map>
using namespace std;
const int szl=3e5+5;
int a[szl];
map<unsigned int,map<unsigned int,int>>bitr;//hash式无敌 
int n,m;
void add(int col,int pos,int data){
	for(;pos<=n;pos+=pos&-pos)bitr[pos][col]+=data;
	return;
}
int ask(int col,int pos){
	int sum=0;
	for(;pos;pos-=pos&-pos){
		sum+=bitr[pos][col];
	}
	return sum;
}
int main(){ 
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",a+i);
		add(a[i],i,1);
	}
	for(int i=1;i<=m;i++){
		int op;scanf("%d",&op);
		if(op==1){
			int l,r,c;scanf("%d%d%d",&l,&r,&c);
			printf("%d\n",ask(c,r)-ask(c,l-1));
		}
		else{
			int x;scanf("%d",&x);
			add(a[x],x,-1);
			add(a[x+1],x,1);
			add(a[x+1],x+1,-1);
			add(a[x],x+1,1);
			swap(a[x],a[x+1]);
		}
	}
	return 0;
}

还是TLE\color{Blue}TLE 了,这是提交记录

我知道树状数组过不去,肯定会炸空间,可是为什么会TLE\color{Blue}TLE 呢???

2023/2/18 10:00
加载中...