对单个点考虑
实际上每个点的结果只被最后的那种操作影响

那么处理一下每个点对应的最后一个操作种类
然后对每个种类都和对应的点都检查一下是否被操作了2次

转化成n个点 m个区间 多少点被覆盖>=2次的问题

#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <queue>
#include <cstdio>
#include <map>
#include <set>
#include <utility>
#include <stack>
#include <cstring>
#include <cmath>
#include <vector>
#include <ctime>
#include <bitset>
using namespace std;
#define pb push_back
#define sd(n) scanf("%d",&n)
#define sdd(n,m) scanf("%d%d",&n,&m)
#define sddd(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define sld(n) scanf("%lld",&n)
#define sldd(n,m) scanf("%lld%lld",&n,&m)
#define slddd(n,m,k) scanf("%lld%lld%lld",&n,&m,&k)
#define sf(n) scanf("%lf",&n)
#define sff(n,m) scanf("%lf%lf",&n,&m)
#define sfff(n,m,k) scanf("%lf%lf%lf",&n,&m,&k)
#define ss(str) scanf("%s",str)
#define ans() printf("%d",ans)
#define ansn() printf("%d\n",ans)
#define anss() printf("%d ",ans)
#define lans() printf("%lld",ans)
#define lanss() printf("%lld ",ans)
#define lansn() printf("%lld\n",ans)
#define fansn() printf("%.10f\n",ans)
#define r0(i,n) for(int i=0;i<(n);++i)
#define r1(i,e) for(int i=1;i<=e;++i)
#define rn(i,e) for(int i=e;i>=1;--i)
#define rsz(i,v) for(int i=0;i<(int)v.size();++i)
#define szz(x) ((int)x.size())
#define mst(abc,bca) memset(abc,bca,sizeof abc)
#define lowbit(a) (a&(-a))
#define all(a) a.begin(),a.end()
#define pii pair<int,int>
#define pli pair<ll,int>
#define pll pair<ll,ll>
#define mp(aa,bb) make_pair(aa,bb)
#define lrt rt<<1
#define rrt rt<<1|1
#define X first
#define Y second
#define PI (acos(-1.0))
#define sqr(a) ((a)*(a))
typedef long long ll;
typedef unsigned long long ull;
const ll mod = 1000000000+7;
const double eps=1e-9;
const int inf=0x3f3f3f3f;
const ll infl = 10000000000000000;
const int maxn=  100000+10;
const int maxm = 40000+10;
//Pretests passed
int in(int &ret)
{char c;int sgn ;if(c=getchar(),c==EOF)return -1;while(c!='-'&&(c<'0'||c>'9'))c=getchar();sgn = (c=='-')?-1:1;ret = (c=='-')?0:(c-'0');while(c=getchar(),c>='0'&&c<='9')ret = ret*10+(c-'0');ret *=sgn;return 1;
}vector<pii>joke[maxn];
int fa[maxn];
bool vis[maxn];
int faf(int x)
{return fa[x]==x?x:fa[x] = faf(fa[x]);
}
struct node
{int idx,l,r;
}no[maxn];
void un(int a,int b)
{int f1 = faf(a), f2 = faf(b);if(f1!=f2)fa[f2]=f1;
}
int main()
{
#ifdef LOCALfreopen("input.txt","r",stdin);
//    freopen("output.txt","w",stdout);
#endif // LOCALint t;sd(t);while(t--){int n,m;sdd(n,m);r1(i,n)fa[i] = i,vis[i] = 0;int mx = 0;r1(i,m){int x,l,k;sddd(x,l,k);mx = max(mx,l);joke[l].pb(mp(max(x-k,1),-1));joke[l].pb(mp(min(x+k,n),1));no[i] = (node){l,max(x-k,1),min(x+k,n)};}int cnt = n;rn(i,m){int l = no[i].l ,r = no[i].r , x = no[i].idx;int now = l;while(now<=r){if(vis[now])now = faf(now)+1;else{vis[now] = 1,--cnt;joke[x].pb(mp(now,0));un(r,now);++now;}}if(!cnt)break;}int ans = cnt;r1(i,mx){sort(all(joke[i]));int now = 0;int add = 0;rsz(j,joke[i]){pii p = joke[i][j];if(p.Y==0&&now>=2)++add;else now -= p.Y;}ans += add;joke[i].clear();}ansn();}return 0;
}

2017 ACM Arabella Collegiate Programming Contest F. Monkeying Around GYM101350F相关推荐

  1. 2017 ACM Arabella Collegiate Programming Contest div2的题,部分题目写个题解

    F. Monkeying Around   维护点在多少个线段上 http://codeforces.com/gym/101350/problem/F 题意:有m个笑话,每个笑话的区间是[L, R], ...

  2. 2017 ACM Arabella Collegiate Programming Contest(solved 9/13, complex 12/13)

    A.Sherlock Bones 题意: 给出长度为n的01串,问f(i,j)=f(j,k),(i<j<k)的i,j,k取值种数.其中f(i,j)表示[i,j]内1的个数, 且s[j]必须 ...

  3. 2017 ACM Arabella Collegiate Programming Contest(solved 11/13)

    省选考前单挑做点ACM练练细节还是很不错的嘛- 福利:http://codeforces.com/gym/101350 先来放上惨不忍睹的virtual participate成绩(中间跑去食堂吃饭于 ...

  4. 2017 ACM Arabella Collegiate Programming Contest

    Gym101350A. Sherlock Bones 题目大意: 给定一个长度为 \(n\) 的 \(01\) 序列 \(\{s_n\}\),定义 \(F(i, j)\) 表示序列第 \(i\) 项到 ...

  5. 2017 ACM Arabella Collegiate Programming Contest G. Snake Rana GYM101350G

    先算一下总的子矩阵个数 总共最多只有20个点 状压一下然后枚举 容斥一下 把求出来的答案减去包含1个点的子矩阵再加上包含2个点的减去3个点的-- #include <iostream> # ...

  6. 【容斥】2017 ACM Arabella Collegiate Programming Contest

    比赛连接 G. Snake Rana Old Macdonald wants to build a new hen house for his hens. He buys a new rectangu ...

  7. 2017 ACM Arabella Collegiate Programming Contest E. Competitive Seagulls GYM101350E

    博弈经典套路 考虑把可选择的操作变成2个相同的 然后跟着对手操作 为奇数的时候选一个奇数把两边留出相同长度的白色 为偶数的时候选一个2把两边留出相同长度的白色 那么只有2 和 3 是不可以的 int ...

  8. 2017 ACM Arabella Collegiate Programming Contest A. Sherlock Bones GYM101350A

    把问题转换为求区间内1为奇数的区间有多少个 那么直接记录从1开始为奇数和偶数的区间有多少就算出这个了 但是有不合法的就是只有1个1的区间 所以再减一下 重复的再加回来 #include <ios ...

  9. 脑洞 博弈 E. Competitive Seagulls 2017 ACM Arabella Collegiate Programming Contest

    题目链接:http://codeforces.com/gym/101350/problem/E 题目大意:给你一个长度为n的方格,方格上面都被染色成了白色.每次染色都是选择白色的,假设目前选择的这块白 ...

最新文章

  1. redhat中使用securecrt 中文乱码解决办法
  2. leetcode2. 两数相加--每天刷一道leetcode系列!
  3. 汇博工业机器人码垛机怎么写_一文带您理解码垛机器人,原来它这么简单!
  4. qeephp 修改acl.yaml文件实现访问控制
  5. zabbix生成资源性能报表+邮件自动发送
  6. 当前主流、最新网络技术回眸(二)
  7. python 图表_新手向——制作web图表(基于Python和GooPyCharts)
  8. 快速撑握C#知识点之变量,类型及类型转换
  9. 线程间操作无效: 从不是创建控件“button2”的线程访问它
  10. 最新席瓦莱恩服务器人口比例,魔兽世界怀旧服:2021年3月最新人口比例数据
  11. VS2008启动调试,出现“ 已经找到网站 正在等待回应”
  12. 深度学习 目标检测Yolo算法代码实现
  13. cf487e Tourists 题解(圆方树)
  14. 免费采集器-网页数据采集器
  15. 1138 清除行注释
  16. [结构光三维重建] 2、基于结构光的三维重建系统工作原理总结
  17. 基于matlab色彩平衡与融合用于水下图像增强
  18. 支付系统-财务记账 复式记账 借贷
  19. 颜色错位HP CM1312nfi MFP打印机 CM1015 1017 CM1312 CP1518等彩色激光打印机颜色校准步骤方法
  20. SAP License:集团化企业多准则多报告的实现

热门文章

  1. 佳博 TSC打印机 TSPL指令开发
  2. 运用MATLAB批量读取excel表格
  3. Android SELinux开发入门指南之如何增加Native Binder Service权限
  4. Mac ps 2021 3D功能无法使用问题,怎么办?
  5. 微信公众号--订阅通知
  6. 感情能慢慢磨合慢慢培养吗_电视慢慢学习如何在网络上玩得开心
  7. 团队管理5 | 管理风格
  8. python随手记自动记账_菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记
  9. excel模拟运算表
  10. 什么是数据中心SOP、MOP、EOP?