传送门

分析

我们考虑用所有的情况减去不合法的情况

不难想出所有情况为$C_n^3$

于是我们考虑不合法的情况

我们知道对于一个不合法的三元组$(a,b,c)$一定是修改后$a<b,b>c$

于是我们可以离散化后用线段树维护每个点被覆盖了几次

所以每次对于一个点$i$,比它大的点的个数即为在它前面修改次数为偶数的数量加在它后面修改次数为奇数的数量

而产生的不合法情况即为$C_{sum_i}^2$

我们再统计前后两种情况的时候将修改排序然后分别从后往前和从前往后各跑一次即可

每次只要区间不再覆盖点$i$则统计答案

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
struct node {
long long le,ri;
};
node q[];
long long d[],col[],n,m;
long long a[],sum[];
vector<long long>id;
inline bool cmp1(const node x,const node y){
return x.le==y.le?x.ri<y.ri:x.le<y.le;
}
inline bool cmp2(const node x,const node y){
return x.ri==y.ri?x.le>y.le:x.ri>y.ri;
}
inline void update(long long le,long long ri,long long wh,long long x,long long y){
if(x>y)return;
if(le>=x&&ri<=y){
col[wh]^=;
d[wh]=(ri-le+)-d[wh];
return;
}
long long mid=(le+ri)>>;
if(col[wh]){
col[wh<<]^=;
col[wh<<|]^=;
d[wh<<]=(mid-le+)-d[wh<<];
d[wh<<|]=(ri-mid)-d[wh<<|];
col[wh]=;
}
if(mid>=x)update(le,mid,wh<<,x,y);
if(mid<y)update(mid+,ri,wh<<|,x,y);
d[wh]=d[wh<<]+d[wh<<|];
}
inline long long Q(long long le,long long ri,long long wh,long long x,long long y){
if(x>y)return ;
if(le>=x&&ri<=y)return d[wh];
long long mid=(le+ri)>>,ans=;
if(col[wh]){
col[wh<<]^=;
col[wh<<|]^=;
d[wh<<]=(mid-le+)-d[wh<<];
d[wh<<|]=(ri-mid)-d[wh<<|];
col[wh]=;
}
if(mid>=x)ans+=Q(le,mid,wh<<,x,y);
if(mid<y)ans+=Q(mid+,ri,wh<<|,x,y);
d[wh]=d[wh<<]+d[wh<<|];
return ans;
}
int main(){
long long i,j,k;
scanf("%lld%lld",&n,&m);
for(i=;i<=n;i++)scanf("%lld",&a[i]),id.push_back(a[i]);;
sort(id.begin(),id.end());
id.erase(unique(id.begin(),id.end()),id.end());
for(i=;i<=m;i++)
scanf("%lld%lld",&q[i].le,&q[i].ri);
sort(q+,q+m+,cmp1);
long long Ans=n*(n-)*(n-)/;
j=;
for(i=;i<=m;i++){
for(j;j<=lower_bound(id.begin(),id.end(),q[i].le)-id.begin();j++)
sum[j]+=(n-j)-Q(,n,,j+,n);
update(,n,,lower_bound(id.begin(),id.end(),q[i].le)-id.begin()+,
upper_bound(id.begin(),id.end(),q[i].ri)-id.begin());
}
for(j;j<=n;j++)sum[j]+=(n-j)-Q(,n,,j+,n);
memset(d,,sizeof(d));
memset(col,,sizeof(col));
sort(q+,q+m+,cmp2);
j=n;
for(i=;i<=m;i++){
for(j;j>=upper_bound(id.begin(),id.end(),q[i].ri)-id.begin()+;j--)
sum[j]+=Q(,n,,,j-);
update(,n,,lower_bound(id.begin(),id.end(),q[i].le)-id.begin()+,
upper_bound(id.begin(),id.end(),q[i].ri)-id.begin());
}
for(j;j>;j--)sum[j]+=Q(,n,,,j-);
for(i=;i<=n;i++)Ans-=sum[i]*(sum[i]-)/;
cout<<Ans;
return ;
}

283E&EZOJ #89 Cow Tennis Tournament的更多相关文章

  1. CodeForces - 283E Cow Tennis Tournament

    Discription Farmer John is hosting a tennis tournament with his n cows. Each cow has a skill level s ...

  2. Codeforces CF#628 Education 8 A. Tennis Tournament

    A. Tennis Tournament time limit per test 1 second memory limit per test 256 megabytes input standard ...

  3. CF 628A --- Tennis Tournament --- 水题

    CF 628A 题目大意:给定n,b,p,其中n为进行比赛的人数,b为每场进行比赛的每一位运动员需要的水的数量, p为整个赛程提供给每位运动员的毛巾数量, 每次在剩余的n人数中,挑选2^k=m(m & ...

  4. Educational Codeforces Round 8 A. Tennis Tournament 暴力

    A. Tennis Tournament 题目连接: http://www.codeforces.com/contest/628/problem/A Description A tennis tour ...

  5. Codeforces Educational Codeforces Round 8 A. Tennis Tournament

    大致题意: 网球比赛,n个參赛者,每场比赛每位选手b瓶水+裁判1瓶水,所有比赛每一个參赛者p条毛巾 每一轮比赛有2^k个人參加比赛(k为2^k<=n中k的最大值),下一轮晋级人数是本轮每场比赛的 ...

  6. Codeforces Round #174 (Div. 1 + Div. 2)

    A. Cows and Primitive Roots 暴力. B. Cows and Poker Game 模拟. C. Cows and Sequence 线段树维护. D. Cow Progra ...

  7. Codeforces Round #382 (Div. 2)C. Tennis Championship 动态规划

    C. Tennis Championship 题目链接 http://codeforces.com/contest/735/problem/C 题面 Famous Brazil city Rio de ...

  8. Codeforces Round #382 (Div. 2) C. Tennis Championship 斐波那契

    C. Tennis Championship time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  9. Tennis Championship

    Tennis Championship time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

随机推荐

  1. Project://Meeting_Room

    models from django.db import models from django.contrib.auth.models import AbstractUser class UserIn ...

  2. codeforces C. Pearls in a Row map的应用

    C. Pearls in a Row time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  3. Oracle hash分区的秘密

    转自:http://www.hellodb.net/2009/12/hash_partition.html 在面试时经常会问一个问题,请列举出hash在数据库内部的应用,hash的原理虽然简单,但是它 ...

  4. 服务端缓存页面及IIS缓存设置

    缓存信息基本概念 我们在看网页的header信息时,经常看到这几个参数:Expires.Cache-Control.Last-Modified.ETag,它们是RFC 2616(HTTP/1.1)协议 ...

  5. 使用.NET中的XML注释(二) -- 创建帮助文档入门篇

    一.摘要 在本系列的第一篇文章介绍了.NET中XML注释的用途, 本篇文章将讲解如何使用XML注释生成与MSDN一样的帮助文件.主要介绍NDoc的继承者:SandCastle. 二.背景 要生成帮助文 ...

  6. maven用途、核心概念、用法、常用参数和命令、扩展

    设置问题解决. http://trinea.iteye.com/blog/1290898 本文由浅入深,主要介绍maven的用途.核心概念(Pom.Repositories.Artifact.Buil ...

  7. Java基础--注解Annotation

    Annotation是给类,方法或域上加的一种特殊的标记,可以通过反射取到注解的类型和值,从而完成某种特定的操作. 定义注解需要使用元注解,元注解有@Retention和@Target //@Rete ...

  8. jQuery UI vs Kendo UI & jQuery Mobile vs Kendo UI Mobile

    jQuery UI vs Kendo UI http://jqueryuivskendoui.com/#introduction jQuery Mobile vs Kendo UI Mobile ht ...

  9. 2015.1.4 判断鼠标点击DataGridView的第几行还是空白处

    public int GetRowIndexAt(int mouseLocation_Y) { if (dvaw.FirstDisplayedScrollingRowIndex < 0) { r ...

  10. 图解JVM和Tomcat类加载机制

    说到本篇的tomcat类加载机制,不得不说翻译学习tomcat的初衷. 之前实习的时候学习javaMelody的源码,但是它是一个Maven的项目,与我们自己的web项目整合后无法直接断点调试.后来同 ...