| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:RE了很久 求助啊In Reply To:Re:RE了很久 求助啊 Posted by:drn at 2012-09-02 17:07:23 找到bug了 query函数写错了我错以为所有叶节点都会有lazy标记
改过就ac了 而且discuss里的数据都能过。。。 附代码
#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(left==right)
return 0;
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=1;
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);
memset(list,false,sizeof(list));
for(int i=1;i<=n;i++){
update(Map[data[i].fi],Map[data[i].se],i,1);
}
printf("%d\n",query(1));
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator