博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3067【树状数组】
阅读量:4947 次
发布时间:2019-06-11

本文共 1120 字,大约阅读时间需要 3 分钟。

题意:

给你两行数字,n个m个,然后给你k条线直接把两个数连起来,问有多少个交叉的
思路:
假定上一行是起点,下一行是终点。
把路按照起点从大到下排序,
然后可以直接对每条路查询,这条路目前的交叉数,等于sum[终点-1]条路相连,
因为是起点是从大到小,终点是取一个前面点的路,所以肯定相交;
具体处理就是利用树状数组存终点,每次取值,复杂度也低;
然后这个K有问题…

//#include 
#include
#include
#include
#include
using namespace std;const int N=1e6+10;typedef long long LL;struct asd{ int s,t;};asd q[N];bool cmp(asd a,asd b){ if(a.s>b.s) return 1; if(a.s==b.s) return a.t>b.t; return 0;}LL c[N];int n,m;int lowbit(int x){ return x&(-x);}void add(int i,LL v){ while(i<=n+7) { c[i]+=v; i+=lowbit(i); }}LL sum(int i){ LL ans=0; while(i>0) { ans+=c[i]; i-=lowbit(i); } return ans;}int main(){ int T; int cas=1; scanf("%d",&T); while(T--) { int num; LL ans; scanf("%d%d",&n,&m); scanf("%d",&num); for(int i=0;i
1) ans+=sum(x-1); add(x,1); } printf("Test case %d: %lld\n",cas++,ans); } return 0;}

转载于:https://www.cnblogs.com/keyboarder-zsq/p/5934788.html

你可能感兴趣的文章
disruptor实操作手冊(二)
查看>>
动态规划 - 活动选择问题
查看>>
Git 2.0 更改 push default
查看>>
echarts地图点定位的问题
查看>>
springBoot整合mybatis、jsp 或 HTML
查看>>
新浪微博---首页技术点二.轮播图的实现
查看>>
6.高性能NIO框架netty
查看>>
线程锁
查看>>
Oracle语句补充
查看>>
vuex使用方法
查看>>
eclipse添加easyExport插件,打开本地文件
查看>>
Docker CE 安装
查看>>
HR面试总结
查看>>
Yahoo!团队:网站性能优化的35条黄金守则(转)
查看>>
redis 基本操作
查看>>
Windows下安装Redis服务
查看>>
Sublime的Package Control的安装
查看>>
【HDOJ】2155 小黑的镇魂曲
查看>>
Mininet实验 脚本实现控制交换机行为
查看>>
c# 获取程序运行的根目录
查看>>