10分,求大佬看看哪里错了
查看原帖
10分,求大佬看看哪里错了
357131
gosgosgoy楼主2020/9/19 19:48
#include<cstdio>
#include<vector>
#include<iostream>
using namespace std;
vector<int> color[53];
struct node{
	int left;
	int right;
	int mindata;
	int num;
	int col;
};
node tr[800001];
int tot,sum;
long long ans;
void build(int now,int l,int r){
	tr[now].left=l;tr[now].right=r;
	if(l==r){
		tot++;
		scanf("%d %d",&tr[now].col,&tr[now].mindata);
		tr[now].num=tot;
		color[tr[now].col].push_back(tot);
		return;
	}
	int mid=(l+r)/2;
	build(now*2,l,mid);
	build(now*2+1,mid+1,r);
	tr[now].mindata=min(tr[now*2].mindata,tr[now*2+1].mindata);
}

int n,k,p;

void fi(int now ,int l,int r){
  if(l<=tr[now].left&&r>=tr[now].right)
   {
   	sum=min(sum,tr[now].mindata);
   	return;
	}
   int mid=(tr[now].left+tr[now].right)/2;
   if(l<=mid)fi(now*2,l,r);
    if(r>mid)fi(now*2+1,l,r);	 
}

void solve(int l,int r,int co){
  if(l>=r)return;
  int flag;
  sum=999999;
  fi(1,color[co][l],color[co][r]);
  if(sum>p)flag=0;
   else flag=1;
  if(flag!=0){
   ans++;
   solve(l+1,r,co);
   solve(l,r-1,co);
   }
}
int main(){

	scanf("%d %d %d",&n,&k,&p);
	build(1,1,n);
	int x,y;
	for(int i=0;i<k;i++){
		solve(0,color[i].size() -1,i);
	}
	printf("%lld",ans);
}
2020/9/19 19:48
加载中...