首页 > 代码库 > poj2528---Mayor's posters
poj2528---Mayor's posters
题意:有t组测试数据,有n张海报,海报按题目给出的顺序覆盖,问最后能看到几张海报。这道题刚开始没想出来,,最后看的题解,,从最后一张海报开始处理 一下子就明白了。线段树区间更新搞之。(当然离散化是必须的)
预处理区间所有值都置0,然后从最后面开始,每次求 l[i] ~r[i]区间的和,如果小于r[i]-l[i]+1,就说明这张海报可以看见,然后把l[i]~r[i]这个区间所有值置为1,继续下一张海报。
1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <ctime> 5 #include <queue> 6 #include <stack> 7 #include <cctype> 8 #include <cstdio> 9 #include <string>10 #include <vector>11 #include <cstdlib>12 #include <cstring>13 #include <iostream>14 #include <algorithm>15 using namespace std;16 typedef unsigned long long ull;17 typedef long long ll;18 const int inf = 0x3f3f3f3f;19 const double eps = 1e-8;20 const int maxn = 2e4+10;21 int n,a[maxn*2],setv[maxn<<2];22 void push_down(int pos)23 {24 if (~setv[pos])25 {26 setv[pos<<1] = setv[pos<<1|1] = setv[pos];27 setv[pos] = -1;28 }29 }30 void update(int l,int r,int pos,int ua,int ub,int v)31 {32 if (ua <= l && ub >= r)33 setv[pos] = v;34 else35 {36 push_down(pos);37 int mid = (l + r) >> 1;38 if (ua <= mid)39 update(l,mid,pos<<1,ua,ub,v);40 if (ub > mid)41 update(mid+1,r,pos<<1|1,ua,ub,v);42 }43 }44 int query(int l,int r,int pos,int ua,int ub)45 {46 if (~setv[pos])47 {48 return setv[pos] * (min(ub,r) - max(ua,l) + 1);49 }50 int mid = (l + r) >> 1;51 int ans = 0;52 if (ua <= mid)53 ans += query(l,mid,pos<<1,ua,ub);54 if (ub > mid)55 ans += query(mid+1,r,pos<<1|1,ua,ub);56 return ans;57 58 }59 int x[maxn],y[maxn];60 int main(void)61 {62 #ifndef ONLINE_JUDGE63 freopen("in.txt","r",stdin);64 #endif65 int t;66 scanf ("%d",&t);67 while(t--)68 {69 scanf ("%d",&n);70 int tot = 0;71 for (int i = 0; i < n; i++)72 {73 scanf ("%d%d",x+i,y+i);74 a[tot++] = x[i];75 a[tot++] = y[i];76 }77 sort(a,a+tot);78 tot = unique(a,a+tot) - a;79 for (int i = 0; i < n; i++)80 {81 x[i] = lower_bound(a,a+tot,x[i]) - a + 1;82 y[i] = lower_bound(a,a+tot,y[i]) - a + 1;83 }84 int ans = 0;85 update(1,tot,1,1,tot,0);86 for (int i = n - 1; i >= 0; i--)87 {88 if (query(1,tot,1,x[i],y[i]) < y[i] - x[i] + 1)89 {90 ans++;91 update(1,tot,1,x[i],y[i],1);92 }93 }94 printf("%d\n",ans);95 }96 return 0;97 }
poj2528---Mayor's posters
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。