zoukankan      html  css  js  c++  java
  • zzuli 1877 蛤玮打扫教室

    1877: 蛤玮打扫教室


    Description

     
    现在知道一共有n个机房,算上蛤玮一共有m个队员,教练做了m个签,每个签上写着两个数L,R(L<=R),抽到的人要把[L,R]的教室全部打扫一遍.由于蛤玮是队长而且他很懒,他通过某种交易提前知道了所有m个签上面写的是什么,而且通过某种魔法可以控制自己抽到哪个签.一个教室被打扫一次就干净了,所以蛤玮想知道自己抽哪些签可以不用打扫教室而且不会被教练发现,即他抽到的区间全都会被别人打扫一遍.
     
    蛤玮被教练叫去打扫机房,集训队有很多机房,也有很多队员,现在他们要用抽签的方式决定谁打扫哪间教室.

    Input

    第一行为一个整数T(1<=T<=20),代表数据组数。每组数据第一行n,m(1<=n,m<=100000),接下来m行,每行两个数L,R(1<=L<=R<=n).

    Output

    每组数据输出一个k,表示多少个签符合蛤玮的要求,接下来一行输出k个数,这些签的编号,下标从1开始.

    Sample Input

    3
    15 5
    4
    5
    6 8
    9 10
    5 6
    3 6
    1 1
    1 1
    2 2
    2 2
    3 3
    3 3
    10 3
    1 4
    2 6
    6 10
     

    Sample Output

    2
    5
    6
    1 2 3 4 5 6
    0
     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<queue>
     5 #include<vector>
     6 using namespace std;
     7 const int maxn=2e5+7;
     8 int a[maxn],b[maxn],c[maxn];
     9 struct Node{int l,r;}p[maxn];
    10 vector<int>ans;
    11 int main()
    12 {
    13     int T;
    14     scanf("%d",&T);
    15     while(T--)
    16     {
    17         ans.clear();
    18         memset(a,0,sizeof(a));
    19         memset(c,0,sizeof(c));
    20         int n,m;
    21         scanf("%d%d",&n,&m);
    22         for(int i=0;i<m;i++)
    23         {
    24             int x,y;
    25             scanf("%d%d",&x,&y);
    26             a[x]++,a[n+y]--;
    27             p[i].l=x,p[i].r=y;
    28         }
    29         int cnt=0;
    30         for(int i=1;i<=n;i++)
    31         {
    32             cnt+=a[i];
    33             b[i]=cnt;
    34             cnt+=a[n+i];
    35         }
    36         for(int i=1;i<=n;i++)
    37         {
    38             if(b[i]>1)c[i]=c[i-1]+1;
    39             else c[i]=c[i-1];
    40         }
    41         for(int i=0;i<m;i++)
    42         {
    43             if(c[p[i].r]-c[p[i].l-1]==p[i].r-p[i].l+1)
    44                 ans.push_back(i);
    45         }
    46         int len=ans.size();
    47         printf("%d
    ",len);
    48         if(len)
    49         {
    50             for(int i=0;i<len-1;i++)
    51                 printf("%d ",ans[i]+1);
    52             printf("%d
    ",ans[len-1]+1);
    53         }
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    XAML实例教程系列
    XAML实例教程系列
    XAML实例教程系列
    正则表达式 修改流程 过程是崎岖的
    Codeforces Round #379 (Div. 2) 解题报告
    (DFS)codevs1004-四子连棋
    (BFS)poj2935-Basic Wall Maze
    (BFS)poj1465-Multiple
    (BFS)uva2554-Snakes & Ladders
    (BFS)hdoj2377-Bus Pass
  • 原文地址:https://www.cnblogs.com/homura/p/5414093.html
Copyright © 2011-2022 走看看