线段树+组合数学

这道题直接做好像根本不可做,考虑转化:我们可以用任意方案数-不合法的方案数,那么答案为:\[C_n^3 - \sum_{i=1}^{n} C_{ki}^2\]
其中ki为第i个点能打赢的人数。为什么是这样的:一个方案不合法只要一个人能打赢两个人就行了。

怎么求ki?考虑线段树,首先将所有人的战斗力排序,然后求出每一个操作的左右端点,然后我们按照左端点排序。每次我们扫描到第i个人时就将左端点为i的操作全部实现(用线段树)然后查询[i+1,n]中被翻转了奇数次的,然后查询[1,i-1]中被翻转了偶数次的。如果i这个点是某项操作的右端点,那么操作完后要去掉她的影响(对后面没有影响了)

收获:注意补集转化

code:

#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#define maxn 200000
#define SZJ int
#define AK main
#define half (l+r)>>1
#define SDOI ()
using namespace std;
#define rep (i,a,b) for (int i=a;i<=b;++i)
#define erpe (i,a) for (int i=head[a];i!=-1;i=e[i].next)
#define int long long
struct hzw
{int l,r;
}t[maxn];
struct zmd
{int lc,rc,tag,sum;
}tre[maxn];
int n,k,num[maxn];
vector<int>bkt[100006];
inline bool cmp(hzw a,hzw b)
{if (a.l==b.l) return a.r<b.r;else return a.l<b.l;
}
inline void pushdown(int s,int l,int r)
{int mid=half;int tmp=tre[s].tag%2;if (!tmp) {tre[s].tag=0;return;}int lson=tre[s].lc,rson=tre[s].rc;tre[lson].sum=(mid-l+1)-tre[lson].sum,tre[lson].tag+=tre[s].tag;tre[rson].sum=(r-mid)-tre[rson].sum,tre[rson].tag+=tre[s].tag;tre[s].tag=0;
}
int cnt=0;
inline void build(int s,int l,int r)
{if (l==r) return;int mid=half;tre[s].lc=++cnt;build(tre[s].lc,l,mid);tre[s].rc=++cnt;build(tre[s].rc,mid+1,r);
}
inline void update(int s,int l,int r,int cl,int cr)
{if (l==cl&&r==cr){tre[s].sum=(r-l+1)-tre[s].sum;tre[s].tag++;return;}if (tre[s].tag) pushdown(s,l,r);int mid = half;if (cr<=mid) update(tre[s].lc,l,mid,cl,cr);else if (cl>mid) update(tre[s].rc,mid+1,r,cl,cr);else {update(tre[s].lc,l,mid,cl,mid);update(tre[s].rc,mid+1,r,mid+1,cr); } tre[s].sum=tre[tre[s].lc].sum+tre[tre[s].rc].sum;
}
inline int query(int s,int l,int r,int cl,int cr)
{if (l==cl&&r==cr) return tre[s].sum;if (tre[s].tag) pushdown(s,l,r);int mid=half;if (cr<=mid) return query(tre[s].lc,l,mid,cl,cr);else if (cl>mid) return query(tre[s].rc,mid+1,r,cl,cr);else {return query(tre[s].lc,l,mid,cl,mid)+query(tre[s].rc,mid+1,r,mid+1,cr);}
}
#undef int
SZJ AK SDOI
{#define int long long cnt=1;cin>>n>>k;for (int i=1;i<=n;++i) cin>>num[i]; sort(num+1,num+1+n);build(1,1,n);num[n+1]=1e17;int fina=n*(n-1)*(n-2)/6;for (int i=1,a,b;i<=k;++i){cin>>a>>b;t[i].l=lower_bound(num+1,num+1+n,a)-num;t[i].r=upper_bound(num+1,num+1+n+1,b)-num-1;if (t[i].l>t[i].r) t[i].l=1e17,t[i].r=1e17;}sort(t+1,t+1+k,cmp);int now=1;for (int i=1;i<=n;++i){while (t[now].l==i) update(1,1,n,t[now].l,t[now].r),bkt[t[now].r].push_back(t[now].l),now++;int tmp=0;if (i>1) tmp+=query(1,1,n,1,i-1);if (i<n) tmp+=(n-i)-query(1,1,n,i+1,n);for (int j=0;j<bkt[i].size();++j) update(1,1,n,bkt[i][j],i);fina-=tmp*(tmp-1)/2;}cout<<fina;
} 

转载于:https://www.cnblogs.com/bullshit/p/9899535.html

CF283E Cow Tennis Tournament相关推荐

  1. 283EEZOJ #89 Cow Tennis Tournament

    传送门 分析 我们考虑用所有的情况减去不合法的情况 不难想出所有情况为$C_n^3$ 于是我们考虑不合法的情况 我们知道对于一个不合法的三元组$(a,b,c)$一定是修改后$a<b,b>c ...

  2. Cow Tennis Tournament

    //矩阵,异或 //树套树 总方案数-不合法方案数 C(N,3) - 不存在一个环(有人能打赢另外两个) 第i个人能赢d[i]场 sum{C(d[i],2)} C(N,3)-sum{C(d[i],2) ...

  3. Transformers

    概述 Transformer 是一种非常流行的架构,它利用和扩展自注意力的概念,为下游任务创建非常有用的输入数据表示. 优点: 通过上下文嵌入更好地表示我们的输入令牌,其中令牌表示基于使用自我注意的特 ...

  4. 2016区域赛前冲刺训练

    UPD 2016.10.23 shift-and (2题) Codeforces 训练 现在已经完成了: 191 [Codeforces Round #377] (6/6) Div 2 A Buy a ...

  5. FORMULA ONE RACES AHEAD (F1锦标赛全速前进)

    Introduction: Sleek cars race at high speeds as top racecar drivers compete for millions of dollars ...

  6. FORMULA ONE RACES AHEAD (F1锦标赛全速前进)【空中英语】

    Introduction: Sleek cars race at high speeds as top race car drivers compete for millions of dollars ...

  7. POJ 3268 D-Silver Cow Party

    http://poj.org/problem?id=3268 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

  8. usaco Cow Tours 牛的旅行

    Cow Tours 牛的旅行 农民 John 的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场. 但是就目前而言,你能看到至少有两个牧区不连通.这样,农民 John 就有 ...

  9. 贪心  POJ - 3617 ​​​​​​​Best Cow Line

    Best Cow Line POJ - 3617 FJ is about to take his N (1 ≤ N ≤ 2,000) cows to the annual"Farmer of ...

最新文章

  1. Image Super-Resolution Using Deep Convolutional Networks
  2. 网站栏目页要如何进行优化呢?
  3. 【年终总结】有三AI至今在人脸图像算法领域都分享了哪些内容?
  4. JAVA关于父亲节的代码_关于父亲节的经典语录
  5. 记录一次Socket异常:java.net.SocketException: Connection reset
  6. 浏览器左上角的小图标怎么整不掉_Honeyview:蜂蜜浏览器
  7. SQL Server报错:选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中...
  8. java 头像 微信群_java怎么生成带用户微信头像的图片,并把这张图片发送给用户。...
  9. 小程序 | 基于WAMP的新闻网小程序开发(体验全栈式开发微信小程序)
  10. swt 键盘事件ctrl+c_VB键盘事件详解
  11. QLayout的属性介绍
  12. 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...
  13. java 富文本 xss_Jsoup 防止富文本 XSS 攻击
  14. 地址省市县三级联动------数据库设计
  15. 破解完全入门篇 第八章--注册码是怎样炼成的
  16. 八达岭长城 景区 导游图 、地图、大图、高清、超高清
  17. The Backrooms - Level 0.2 - 我爱杏仁水
  18. 车牌识别停车场智能管理系统
  19. vue项目整合ckplayer
  20. 解决”error: info is different in .repo/manifests/.git vs .repo/manifests.git报错

热门文章

  1. 编写一个程序,用来分别求2个整数、3个整数、2个双精度数和3个双精度数的最大值。
  2. 算法训练 装箱问题(贪心,动态规划,蓝桥杯,C++)
  3. 1267:【例9.11】01背包问题
  4. 百度地图定位后保存图片
  5. leetcode 第294场周赛题解
  6. 计算机毕业设计之java+ssm公交站牌广告灯箱管理系统
  7. 开学季,乐高LEGO用AI,给这群特殊儿童做了件善事
  8. 展示一下telnetd的协商状态机
  9. 2018年终总结,释放了积压两年的心情
  10. Win11设置了兼容模式还是打不开网页怎么回事?