我的vector为什么95!
  • 板块P3939 数颜色
  • 楼主RAYMOND_7
  • 当前回复30
  • 已保存回复30
  • 发布时间2020/10/3 11:53
  • 上次更新2023/11/5 12:10:36
查看原帖
我的vector为什么95!
226523
RAYMOND_7楼主2020/10/3 11:53

以下是代码,我卡了几遍#15都过不去

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
void read(int &x){
	char c=getchar();
	int k=1;
	while(c<'0'||c>'9') {if(c=='-') k=-1;c=getchar();}
	for(x=0;c>='0'&&c<='9';c=getchar())
	x=x*10+c-'0';
	x*=k;
}
const int N=3e5;
int n,m,k,q,s,ans,x,y,l,r,op;
int c,d,color[N+5];
struct fox{
	vector<int> vec;int num;
}a[N+5];
int main(){
	read(n);read(m);
	for(int i=1;i<=N;i++){
		a[i].vec.push_back(0);
	}
	for(int i=1;i<=n;i++){
		read(x);
		color[i]=x;
		a[x].num++;
		a[x].vec.push_back(i);
	}
	for(int i=1;i<=N;i++){
		sort(a[i].vec.begin(),a[i].vec.end());
	}
	while(m--){
		read(op);read(l);
		if(op==2){
			r=l+1;
			if(color[l]==color[r]) continue;
			x=color[l];y=color[r];
			swap(color[l],color[r]);
			a[x].vec.erase(lower_bound(a[x].vec.begin(),a[x].vec.end(),l));
			a[y].vec.erase(lower_bound(a[y].vec.begin(),a[y].vec.end(),r));
			a[x].vec.insert(lower_bound(a[x].vec.begin(),a[x].vec.end(),r),r);
			a[y].vec.insert(lower_bound(a[y].vec.begin(),a[y].vec.end(),l),l);
		}
		else{
			read(r);read(c);
			y=upper_bound(a[c].vec.begin(),a[c].vec.end(),r)-a[c].vec.begin()-1;
			x=lower_bound(a[c].vec.begin(),a[c].vec.end(),l)-a[c].vec.begin();
			if(l>r){
				printf("0\n");
			}
			else{
				printf("%d\n",y-x+1);
			}
		}
	}
	return 0;
}

哪位神仙能告诉我怎么卡常?

只要卡常就行

2020/10/3 11:53
加载中...