30/09/2018, 19:33

Ai đó làm ơn debug giúp em đc ko ạ :'(

Em có code như sau:

#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

typedef pair<int,int> ii;
typedef vector<ii> vii;
typedef vector<int> vi;

struct data{
	int start;
	int end;
	int val;
	int pos;
	data(int S,int E,int V,int P):start(S),end(E),val(V),pos(P) {}
};

bool compare(const data&a, const data&b){
	return a.val > b.val;
}

vii in;
vector<data> que;
vector<int> result;
vi tree;
int N;

void update(int n){
	int k=n+1;
	tree[k]+=1;
	while(k<=N){
		k+=(k&(-k));
		tree[k]+=1;
	}
}

int get(int n){
	int s=0;
	while(n>0){
		s+=tree[n];
		n-=(n&(-n));
	}
	return s;
}

int main(){
	int i,j;
	scanf("%d",&N);
	tree.assign(N+1,0);
	in.assign(N,ii());
	for(i=0;i<N;i++){
		int a;
		scanf("%d",&in[i].first);
		in[i].second=i;
	}
	sort(in.begin(),in.end(),greater<ii>());
	
	int quest;
	scanf("%d",&quest);;
	result.assign(quest,0);
	
	for(i=0;i<quest;i++){
		int ii,jj,kk;
		scanf("%d %d %d",&ii,&jj,&kk);;
		que.push_back(data(ii,jj,kk,i));
	}
	sort(que.begin(),que.end(),compare);
	
	int position =0 ;
	for(i=0;i<que.size();i++){
		data vv=que[i];
		int s=vv.start , e=vv.end ,v=vv.val, p=vv.pos;
		while(position<N && in[position].first > v){
			update(in[position].second);
			position++;
		}
		result[p]=get(e) - get(s-1);
	}
	for(i=0;i<result.size();i++){
		printf("%d-",i);
		printf("%d
",result[i]);
	}
	return 0;
}

Và input thế này

5
5 1 2 3 4
3
2 1 4
4 5 6
3 3 7

và vì 1 lý do nào đó mà khi in xong rồi nó hiện lên

... .exe has stopped working

Ai giải thích và debug hộ em đc ko ạ ToT em cảm ơn ạ

Bài liên quan
0