首页 > 试题广场 >

签到题

[编程题]签到题
  • 热度指数:15 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 512M,其他语言1024M
  • 算法知识视频讲解
恭喜你找到了本场比赛的签到题!
为了让大家都有抽奖的机会,只需要复制粘贴以下代码(并且稍微填下空)即可 AC:
(我超良心的)
#include <algorithm>
 #include <iostream>
 #include <cstring>
 #include <climits>
 #include <cstdio>
 #include <vector>
 #include <cstdlib>
 #include <ctime>
 #include <cmath>
 #include <queue>
 #include <stack>
 #include <map>
 #include <set>
 #define fi first
 #define lc (x<<1)
 #define se second
 #define U unsigned
 #define rc (x<<1|1)
 #define Re register
 #define LL long long
 #define MP std::make_pair
 #define CLR(i,a) memset(i,a,sizeof(i))
 #define FOR(i,a,b) for(Re int i = a;i <= b;++i)
 #define ROF(i,a,b) for(Re int i = a;i >= b;--i)
 #define SFOR(i,a,b,c) for(Re int i = a;i <= b;i+=c)
 #define SROF(i,a,b,c) for(Re int i = a;i >= b;i-=c)
 #define DEBUG(x) std::cerr << #x << '=' << x << std::endl
 const int MAXN = 1000000+5;
 int N,maxL;
 std::set<std::pair<int,int> > L;
 inline int calc(){
     // 返回 set 中所有线段的并长度。(每个 pair 表示一个线段[first,second]
 }
 int main(){
     scanf("%d%d",&N,&maxL);
     while(N--){
         int opt,x,y;
         scanf("%d%d%d",&opt,&x,&y);
         if(opt == 1){
             if(L.find(MP(x,y)) != L.end()) continue;
             L.insert(MP(x,y));
         }
         if(opt == 2){
             if(L.find(MP(x,y)) == L.end()) continue;
             L.erase(MP(x,y));
         }
         if(opt == 3){
             printf("%d\n",calc());
         }
     }
     return 0;
 }

输入描述:
第一行两个整数 N,L,意义如代码所述。

接下来 N 行,每行三个整数 opt,l,r,意义如代码所述。


输出描述:
对于每一组 opt=3 的询问输出一个答案。
示例1

输入

6 13
1 1 2
1 4 5
1 4 7
1 6 9
1 12 13
3 3 3

输出

10

说明

我们依次加入线段[1,2],[4,5],[4,7],[6,9],[12,13], 它们的并集长度为 10.

备注:
,保证数据随机生成。
头像 JQK2020
发表于 2020-05-13 21:47:07
题目描述恭喜你找到了本场比赛的签到题!为了让大家都有抽奖的机会,只需要复制粘贴以下代码(并且稍微填下空)即可 AC:(我超良心的) #include &lt;algorithm&gt; #include &lt;iostream&gt; #include & 展开全文
头像 算法妙妙屋
发表于 2020-05-12 21:40:11
好久没刷题了,写个线段树要debug那么久,能过我也是觉得很神奇的。建立线段树维护每个节点上一个cover值,cover值如果大于0,代表这个节点代表的区间被覆盖了cover次,query 的时候统计cover值>0的区间的长度和。 当然,如果这个节点cover不大于0,两边的叶子都要查看。 展开全文
头像 sunrise__sunrise
发表于 2020-07-25 09:47:27
签到题模拟做法 和我一样一开始照着出题人描述补函数的举起爪子,我最后TLE吐了,才发现,如果按照他思路,时间爆炸了……直接改掉函数,模拟就行了,其实也可以用线段树,当然更快,模拟更轻松一点就是了。)看来被set大常数卡的不轻,当然也感谢出题人仁慈没给极限数据…… #include<bits/s 展开全文
头像 牛客532105025号
发表于 2023-08-20 16:36:49
签到题 (nowcoder.com) 问题描述:添加、删除线段,并求总的线段并。 思路:线段树。 pushup(int u)函数用来将以u为根的两个儿子的的最小区间并的长度合并到结点u,对儿子的区间并长度减去获得到的最小区间并长度。 void pushup(int u) { int mi = 展开全文

问题信息

难度:
0条回答 20浏览

热门推荐

通过挑战的用户

查看代码
签到题