JYZdalao上课讲了这道题,觉得很好可做

其实也是一道理解了就水爆了的题目

把题意抽象化,可以发现题目求的满足

  • i<j

  • a[i]>=j

  • a[j]>=i

的i,j对数。由于i,j顺序问题,可以在不考虑i,j顺序的情况下将ans>>1

如果题目只要求前两个条件,那就是求逆序对的个数,树状数组即可

但是这里还要求a[j]>=i,因此我们先把a排序一遍,然后把所有小于i的全部弹出

剩下的就是树状数组水一水了

注意a[i]=min(a[i],n+1)(太大了要爆内存,也没有离散化的必要)

CODE

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=2e5+5;
struct data
{
int x,num;
}a[N];
int s[N],n,now;
long long ans,tree[N];
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch=tc();
while (ch<'0'||ch>'9') ch=tc();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
}
inline int min(int a,int b)
{
return a<b?a:b;
}
inline bool comp(data a,data b)
{
return a.x<b.x;
}
inline int lowbit(int x)
{
return x&(-x);
}
inline void add(int x,int y)
{
while (x<=n+1)
{
tree[x]+=y;
x+=lowbit(x);
}
}
inline long long get(int x)
{
long long res=0;
while (x)
{
res+=tree[x];
x-=lowbit(x);
}
return res;
}
int main()
{
register int i;
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
read(n);
for (i=1;i<=n;++i)
{
read(s[i]); s[i]=min(s[i],n+1);
a[i].x=s[i]; a[i].num=i; add(i,1);
}
sort(a+1,a+n+1,comp);
for (now=1,i=1;i<=n;++i)
{
while (now<=n&&a[now].x<i) add(a[now++].num,-1);
ans+=get(s[i]);
if (i<=s[i]) --ans;
}
printf("%lld",ans>>1);
return 0;
}

CF 961E Tufurama的更多相关文章

  1. Codeforces 961E - Tufurama

    961E - Tufurama 思路: 线段树或者分块 遍历 1 - n - 1,求 区间[i + 1, min(a[i], n)]大于等于 i 的个数,累加起来 线段树: #include<b ...

  2. 树状数组 简单题 cf 961E

    题目链接 : https://codeforces.com/problemset/problem/961/E One day Polycarp decided to rewatch his absol ...

  3. 2018.12.05 codeforces 961E. Tufurama(主席树)

    传送门 一眼主席树sbsbsb题(%%%树状数组大佬们). 简化题意:求满足x<y,y≤ax,x≤ayx<y,y\le a_x,x\le a_yx<y,y≤ax​,x≤ay​的(x, ...

  4. Codeforces 961E - Tufurama 树状数组

    转自:https://blog.csdn.net/my_sunshine26/article/details/79831362 题目大意: i从1开始 基本思路: 完全没思路,所以上来就二分,果不其然 ...

  5. 【树状数组】CF961E Tufurama

    挺巧妙的数据结构题(不过据说这是一种套路? E. Tufurama One day Polycarp decided to rewatch his absolute favourite episode ...

  6. Tufurama CodeForces - 961E

    Tufurama CodeForces - 961E 题意:有一部电视剧有n季,每一季有ai集.问有多少对i,j存在第i季第j集也同时存在第j季第i集. 思路:核心问题还是统计对于第i季,你要统计第i ...

  7. Tufurama CodeForces - 961E (cdq分治)

    题面 One day Polycarp decided to rewatch his absolute favourite episode of well-known TV series " ...

  8. Educational Codeforces Round 41 E. Tufurama (961E)

    [题解] 第一眼看题飞快地想到一种做法,然后假掉了. 这道题其实是主席树的模板题来着.但是也有别的水法. 我们可以发现每个位置的查询区间是[1,min(a[i],i-1)],所以我们可以把查询区间按照 ...

  9. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

随机推荐

  1. js替换数组中字符串实例

    这个是替换数组中的一个对象字符串: 直接上代码: var aaa=[ {"name":"张珊","sex":"man"} ...

  2. Chrome下解决本地异步请求失败的问题(Origin null is not allowed by Access-Control-Allow-Origin. )

    Chrome更新版本后发现打开本地Jquery easyui没有数据,查看控制台才发现如下问题解决的办法是设置启动参数"--allow-file-access-from-files" ...

  3. 【前端】NodeJs包管理工具NPM

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS部署上的很多问题. 测试是否安装成功,出现版本提示表示安装成功. npm -v NPM常用命令 官方文档:https://www.npm ...

  4. mysql瑞士军刀–pt工具

    Percona-Toolkits Percona-toolkit 简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql任务和系统任务,这些 ...

  5. 过滤掉URL中的参数部分

    //将超链接的参数部分滤掉 ?xxx if(url.contains("?")){ url=url.substring(0,url.indexOf("?")); ...

  6. You are not late! You are not early!

    Do you think you are going No Where in Life? STOP! Take a deep breathe THINK! New York is three hour ...

  7. Docker容器学习与分享02

    1.docker容器的创建 首先运行一个centos容器,感受一下Docker容器的便捷 首先先看一下镜像仓库 发现仓库里没有镜像,也就是没有创建容器的模板,这时考虑从REPOSITORY中拉取镜像( ...

  8. 如何将XML文件导入Excel中

    如下图所示为一个规范的XML文件,在Excel中可以将规范的XML文件导入到Excel成为规范的表格.具体有如下几种方法:   工具/原料   Excel 方法/步骤     单击“数据”选项卡下的“ ...

  9. 【转】网络安全——一图看懂HTTPS建立过程

    阅读目录 准备工作(对应图中prepare1234) 发起链接 最后 关于网络安全加密的介绍可以看之前文章: 1. 网络安全——数据的加密与签名,RSA介绍2. Base64编码.MD5.SHA1-S ...

  10. ethjs-1-了解

    https://github.com/ethjs/ethjs/blob/master/docs/user-guide.md Install npm install --save ethjs Usage ...