Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

RE了很久 求助啊

Posted by drn at 2012-09-01 20:18:36 on Problem 2528
/*一开始以为是线段树开小了 后来发现我这种算法最坏时要开到16倍 但不知为何还是RE 自己随机的大数据也没发现问题 RE找不到原因真是太苦了 求助啊 让我改成WA和TLE都行啊
*/

#include <iostream>
#include <fstream>
#include <cstdio>
#include <iomanip>
#include <cmath>
#include <cstring>
#include <string>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <iterator>
#include <algorithm>
using namespace std;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define Inf (1<<29)
const int maxn=11111;
struct Line{
	int left,right,col;
}T[maxn<<4];
pair<int,int> data[maxn];
map<int,int> Map;
int tmp[maxn<<2];
bool list[maxn];
#define lson (rt<<1)
#define rson (rt<<1|1)
#define mid (left+right>>1)
#define left (T[rt].left)
#define right (T[rt].right)
#define len (right-left+1)
inline void pushdown(int rt){
	T[lson].col=T[rson].col=T[rt].col;
	T[rt].col=0;
}
void build(int l,int r,int rt){
	left=l,right=r;
	T[rt].col=0;
	if(l==r)
		return;
	build(l,mid,lson);
	build(mid+1,r,rson);
}
void update(int l,int r,int c,int rt){
	if(l<=left&&right<=r){
		T[rt].col=c;
		return;
	}
	if(T[rt].col)
		pushdown(rt);
	if(l<=mid)
		update(l,r,c,lson);
        if(r>mid)
		update(l,r,c,rson);		
}
int query(int rt){
	if(T[rt].col){
		if(list[T[rt].col]==false){
			list[T[rt].col]=true;
			return 1;
		}
		return 0;
	}
	if(T[rt].col)
		pushdown(rt);
	return query(lson)+query(rson);
}
int main(){
	int test,n,l,r;
	scanf("%d",&test);
	while(test--){
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
			scanf("%d%d",&data[i].fi,&data[i].se);
		int id=0;
		for(int i=1;i<=n;i++){
			tmp[id++]=data[i].fi
			tmp[id++]=data[i].se;
		}
		sort(tmp,tmp+id);
		int cnt=0;
		Map[tmp[0]]=++cnt;
		for(int i=1;i<id;i++){
			if(tmp[i]==tmp[i-1])
				continue;
			if(tmp[i]!=tmp[i-1]+1)
				++cnt;
			Map[tmp[i]]=++cnt;
		}		
		build(1,cnt,1);
		for(int i=1;i<=n;i++){
			update(Map[data[i].fi],Map[data[i].se],i,1);
		}
		printf("%d\n",query(1));
		Map.clear();
		memset(list,false,sizeof(list));
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator