博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3067【树状数组】
阅读量:4946 次
发布时间: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

你可能感兴趣的文章
面试介绍项目经验(转)
查看>>
<metro>Google的验证
查看>>
Oracle 表的分组操作
查看>>
在OS X上的Intllij Idea中配置GlassFish
查看>>
用查表法快速转换yv12到RGB【转】
查看>>
使用公钥登录SSL
查看>>
hdu 1290_献给杭电五十周年校庆的礼物
查看>>
豆瓣电影api
查看>>
BufferedInputStream和FileInputStream的区别
查看>>
likely() 和 unlikely()
查看>>
03一些View总结
查看>>
MapReduce--平均分,最高,低分以及及格率的计算
查看>>
mac下管理论文的工具
查看>>
14-6-27&28自学内容小结
查看>>
JSP
查看>>
---
查看>>
(第一组_GNS3)自反ACl
查看>>
hdu--1258--Sum It Up(Map水过)
查看>>
Spring @DeclareParents 的扩展应用实例
查看>>
VS2012更新Update1后帮助查看器无法打开
查看>>