zoukankan      html  css  js  c++  java
  • 牛客暑假多校第六场 I Team Rocket

    题意: 现在有n条火车, 每条火车都有一个运行 [ Li, Ri ], 现在有m支火箭队, 每次火箭队都会破坏这整条铁路上的一个点, 如果一条火车的运行区间[Li, Ri] 被破坏了, 那么这条火车会立刻停止。

    题解:线段树, 先将所有火车的左右端点排好序, 然后每一个叶子节点都是一个火车的区间, 每一颗子树的根节点都保存着子树内所有火车的运行区间的最左边的点 还有 最右边的点,然后xjb乱找, 如果找到一条火车被破坏了, 那我们就将这条火车的左端点改成 inf  右端点改成 -inf, 这样就不会对接下来的操作产生影响。

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
     4 #define LL long long
     5 #define ULL unsigned LL
     6 #define fi first
     7 #define se second
     8 #define pb push_back
     9 #define lson l,m,rt<<1
    10 #define rson m+1,r,rt<<1|1
    11 #define max3(a,b,c) max(a,max(b,c))
    12 #define min3(a,b,c) min(a,min(b,c))
    13 typedef pair<int,int> pll;
    14 const int inf = 0x3f3f3f3f;
    15 const LL INF = 0x3f3f3f3f3f3f3f3f;
    16 const LL mod =  998244353;
    17 const int N = 4e5 + 100;
    18 int L[N], R[N], id[N], ans[N];
    19 int lmin[N<<2], rmax[N<<2];
    20 int t;
    21 bool cmp(int x, int y){
    22     if(L[x] == L[y]) return R[x] < R[y];
    23     return L[x] < R[y];
    24 }
    25 /*bool cmp(int x, int y){
    26     return L[x] + R[x] < L[y] + R[y];
    27 }*/
    28 void Push_UP(int rt){
    29     lmin[rt] = min(lmin[rt<<1], lmin[rt<<1|1]);
    30     rmax[rt] = max(rmax[rt<<1], rmax[rt<<1|1]);
    31 }
    32 void Build(int l, int r, int rt){
    33     if(l == r){
    34         lmin[rt] = L[id[l]];
    35         rmax[rt] = R[id[l]];
    36         return ;
    37     }
    38     int m = l+r >> 1;
    39     Build(lson);
    40     Build(rson);
    41     Push_UP(rt);
    42 }
    43 LL res = 0;
    44 int Update(int l, int r, int rt, int x){
    45     if(x > rmax[rt] || x < lmin[rt]) return 0;
    46     if(l == r){
    47         rmax[rt] = -inf;
    48         lmin[rt] = inf;
    49         ans[id[l]] = t;
    50         res = id[l] * res % mod;
    51         return 1;
    52     }
    53     int m = l+r >> 1;
    54     int a = Update(lson, x) + Update(rson, x);
    55     Push_UP(rt);
    56     return a;
    57 }
    58 int main(){
    59     int T;
    60     scanf("%d", &T);    
    61     for(int _i = 1; _i <= T; _i++){
    62         int n, m;
    63         res = 0;
    64         scanf("%d%d", &n, &m);
    65         printf("Case #%d:
    ", _i);
    66         for(int i = 1; i <= n; i++){
    67             scanf("%d%d", &L[i], &R[i]);
    68             id[i] = i; ans[i] = 0;
    69         }
    70         sort(id+1, id+1+n, cmp);
    71         Build(1, n, 1);
    72         for(t = 1; t <= m; t++){
    73             int x;
    74             scanf("%d", &x);
    75             x ^= res, res = 1;
    76             //cout << x << endl;
    77             int cc = Update(1,n,1,x);
    78             if(!cc) res = 0;
    79             printf("%d
    ", cc);
    80         }
    81         for(int i = 1; i <= n; i++)
    82             printf("%d%c", ans[i], " 
    "[i==n]);
    83     }
    84     return 0;
    85 }
    View Code
  • 相关阅读:
    Python爬虫连载9-JS加密之“盐”​、ajax请求
    Java连载86-List集合详解
    HTML连载69-透视属性以及其他属性练习
    Java连载85-集合的Contains和Remove方法
    Python爬虫连载8-JS加密(一)
    Java连载84-Collection的常用方法、迭代器
    HTML连载68-形变中心点、形变中心轴
    Java连载83-单向链表、双向链表、collections常用方法
    [刷题] 447 Number of Boomerangs
    [刷题] 454 4Sum II
  • 原文地址:https://www.cnblogs.com/MingSD/p/9437531.html
Copyright © 2011-2022 走看看