| ||||||||||
| 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 | |||||||||
这神题(像LS所说)只有写错了才能A。。。。。。无语 一整天搭进去了#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define lson l, mid, idx << 1
#define rson mid + 1, r, idx << 1 | 1
const int N = 21000;
int tmp[N], h[10001000], T, tcnt, cnt, n, w, l[N], r[N], ans;
int col[N << 4];
bool vis[N];
inline void PushDown(int idx){
if(col[idx] != 0)
col[idx << 1] = col[idx << 1 | 1] = col[idx];
col[idx] = 0;
}
inline void updata(int L, int R, int l, int r, int idx){
if(L <= l && r <= R){
col[idx] = w;
return ;
}
int mid = (l + r) >> 1;
PushDown(idx);
if(L <= mid) updata(L, R, lson);
if(R > mid) updata(L, R, rson);
}
inline void query(int l, int r, int idx){
if(l == r){
if(!vis[col[idx]])
ans ++, vis[col[idx]] = true;
return ;
}
int mid = (l + r) >> 1;
PushDown(idx);
query(lson);
query(rson);
}
int main()
{
scanf("%d", &T);
while(T --){
tcnt = 0;
cnt = 0;
w = 0;
memset(col, 0, sizeof col);
memset(vis, 0, sizeof vis);
scanf("%d", &n);
for(int i = 1; i <= n; i ++){
scanf("%d", &l[i]);
scanf("%d", &r[i]);
tmp[++ tcnt] = l[i];
tmp[++ tcnt] = r[i];
}
sort(tmp + 1, tmp + 1 + tcnt);
for(int i = 1; i <= tcnt; i ++){
if(tmp[i] == tmp[i - 1])
h[tmp[i]] = h[tmp[i - 1]];
// else if(tmp[i] - tmp[i - 1] > 1)
// h[tmp[i]] = h[tmp[i - 1]] + 2; //有木有 有木有 这样映射才是对的 但删了这句话才能A啊!!!!!!!
else
h[tmp[i]] = h[tmp[i - 1]] + 1;
}
cnt = h[tmp[tcnt]];
for(int i = 1; i <= n; i ++){
w ++;
updata(l[i], r[i], 1, cnt, 1);
}
ans = 0;
query(1, cnt, 1);
printf("%d\n", ans);
}
while(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