hdu4911

max(逆序数-k,0)

 #include <iostream>
#include<stdio.h>
#include<vector>
#include<queue>
#include<stack>
#include<string.h>
#include<algorithm>
#include<map>
using namespace std;
#define LL long long
#define gcd(a,b) (b==0?a:gcd(b,a%b))
#define lcm(a,b) (a*b/gcd(a,b))
//O(n)求素数,1-n的欧拉数
#define N 100010
//A^x = A^(x % Phi(C) + Phi(C)) (mod C)
map<int,int>f;
struct node
{
int a;
int id;
}p[N];
int s[N<<],b[N];
void up(int w)
{
s[w] = s[w<<]+s[w<<|];
}
void build(int l,int r,int w)
{
if(l==r)
{
s[w] = ;
return ;
}
int m = (l+r)>>;
build(l,m,w<<);
build(m+,r,w<<|);
up(w);
}
void update(int p,int d,int l,int r,int w)
{
if(l==r)
{
s[w] += d;
return ;
}
int m =(l+r)>>;
if(p<=m)
update(p,d,l,m,w<<);
else
update(p,d,m+,r,w<<|);
up(w); }
int query(int a,int b,int l,int r,int w)
{
if(a<=l&&b>=r)
return s[w];
int m = (l+r)>>;
int res = ;
if(a<=m) res+=query(a,b,l,m,w<<);
if(b>m) res+=query(a,b,m+,r,w<<|);
return res;
}
bool cmp(node a,node b)
{
return a.a<b.a;
}
int main()
{
int n,i,j,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
f.clear();
for(i = ; i<= n; i++)
{
scanf("%d",&p[i].a);
p[i].id = i;
b[i] = p[i].a;
}
sort(b+,b+n+);
f[b[]] = ;
int o = ;
for(i = ; i<= n; i++)
if(b[i]!=b[i-])
{
f[b[i]] = ++o;
}
build(,o,);
LL s = ;
for(i = ; i<= n ;i++)
{
//cout<<f[p[i].a]<<endl;
int kk = ;
if(f[p[i].a]<o)
kk = query(f[p[i].a]+,o,,o,);
update(f[p[i].a],,,o,);
s+=kk;
}
LL x = ;
s = max(x,s-k);
cout<<s<<endl;
}
return ;
}

HDU4913

几个数的LCM = 分解质因子之后每个质因子的最高次幂相乘之积  这里因为只有2、3 . lcm = 2^max*3^max

可以把b从小到大排序

x1 a1 b1

x2 a2 b2

x3 a3 b3

x4 a4 b4

假如现在集合里面没有数为空集,从上往下依次插入这些数,插入x1时 ,因为当前b1是最大的,它所构成的所有集合中3的最高次幂肯定选b1,

所以现在只需找到集合中的2的最高次幂分别有哪些,显然第一个只有 a1.而当插入第二个、第三个、第四个时,3的最高次幂分别为b2 b3 b4 ,a的选择会有多种,

对于如果选择了a1那么这样的集合将会有2^k个,k = 比a1小的数的个数,总的式子为 bi(2^k1*2^a1+2^k2*2^a2+2^k3*2^a3......) ( 所有的aj<ai)

这样可以开一个线段树维护前面有多少个比ai小的数,再开一个线段树维护后面的每一项的总值,例如1就为2^k1*2^a1

每插入一项,就把2^ki*2^ai放入第i个位置,求完当前和值后,将所有大于ai的值*2,依次扫描一遍就可得出结果。

 #include <iostream>
#include<stdio.h>
#include<vector>
#include<queue>
#include<stack>
#include<string.h>
#include<algorithm>
#include<map>
using namespace std;
#define LL __int64
#define gcd(a,b) (b==0?a:gcd(b,a%b))
#define lcm(a,b) (a*b/gcd(a,b))
#define N 100005
#define mod 1000000007
struct node
{
int a,b;
int id;
} p[N];
LL lz[N<<],s[N<<];
LL sum[N<<];
int po[N];
LL mul(LL a,LL b,LL m)
{
LL d,t;
d=;
t=a;
while (b>)
{
if (b%==)
d=(d*t)%m;
b/=;
t=(t*t)%m;
}
return d;
}
bool cmp(node x,node y)
{
return x.a<y.a;
}
bool cmpp(node x,node y)
{
return x.b<y.b;
}
void up(int w)
{
s[w] = (s[w<<]+s[w<<|])%mod;
}
void build(int l,int r,int w)
{
lz[w] = ;
if(l==r)
{
s[w] = ;
return ;
}
int m = (l+r)>>;
build(l,m,w<<);
build(m+,r,w<<|);
up(w);
}
void down(int w,int m)
{
if(lz[w]!=)
{
lz[w<<] = (lz[w<<]*lz[w])%mod;
lz[w<<|] = (lz[w<<|]*lz[w])%mod;
s[w<<] = (s[w<<]*lz[w])%mod;
s[w<<|] = (s[w<<|]*lz[w])%mod;
lz[w] = ;
}
}
void update(int p,LL d,int l,int r,int w)
{
if(l==r)
{
s[w] = d;
return ;
}
down(w,r-l+);
int m = (l+r)>>;
if(p<=m)
update(p,d,l,m,w<<);
else
update(p,d,m+,r,w<<|);
up(w);
}
void update1(int a,int b,LL d,int l,int r,int w)
{
if(a<=l&&b>=r)
{
s[w] = (s[w]*d)%mod;
lz[w] = (lz[w]*d)%mod;
return ;
}
down(w,r-l+);
int m = (l+r)>>;
if(a<=m) update1(a,b,d,l,m,w<<);
if(b>m) update1(a,b,d,m+,r,w<<|);
up(w);
}
LL query(int a,int b,int l,int r,int w)
{
if(a<=l&&b>=r) return s[w];
int m = (l+r)>>;
LL res = ;
if(a<=m) res+=query(a,b,l,m,w<<);
if(b>m) res = (res+query(a,b,m+,r,w<<|))%mod;
return res;
}
void up1(int w)
{
sum[w] = sum[w<<]+sum[w<<|];
}
void build1(int l,int r,int w)
{
if(l==r)
{
sum[l] = ;
return ;
}
int m = (l+r)>>;
build1(l,m,w<<);
build1(m+,r,w<<|);
up1(w);
}
void update2(int p,int l,int r,int w)
{
if(l==r)
{
sum[w] = ;
return ;
}
int m = (l+r)>>;
if(p<=m)
update2(p,l,m,w<<);
else update2(p,m+,r,w<<|);
up1(w);
}
int query1(int a,int b,int l,int r,int w)
{
if(a<=l&&b>=r)
{
return sum[w];
}
int m = (l+r)>>;
int res=;
if(a<=m) res+=query1(a,b,l,m,w<<);
if(b>m) res+=query1(a,b,m+,r,w<<|);
return res;
}
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF)
{
memset(sum,,sizeof(sum));
for(i = ; i<= n; i++)
{
scanf("%d%d",&p[i].a,&p[i].b);
p[i].id = i;
}
sort(p+,p+n+,cmp);
for(i = ; i <= n ; i++)
{
po[p[i].id] = i;
}
sort(p+,p+n+,cmpp);
build(,n,);
LL ans = ;
build1(,n,);
for(i = ; i <= n; i++)
{
int k = query1(,po[p[i].id],,n,);
//cout<<k<<" "<<p[i].a<<" "<<po[p[i].id]<<endl;
update2(po[p[i].id],,n,);
update(po[p[i].id],mul(,p[i].a+k,mod),,n,);
LL ss = query(po[p[i].id],n,,n,);
// cout<<ss<<endl;
ans=(ans+(mul(,p[i].b,mod)*ss)%mod)%mod;
if(po[p[i].id]<n)
update1(po[p[i].id]+,n,,,n,);
}
printf("%I64d\n",ans);
}
return ;
}
 #include <iostream>
#include<stdio.h>
#include<vector>
#include<queue>
#include<stack>
#include<string.h>
#include<algorithm>
#include<map>
using namespace std;
#define LL __int64
#define gcd(a,b) (b==0?a:gcd(b,a%b))
#define lcm(a,b) (a*b/gcd(a,b))
#define N 100005
#define mod 1000000007
struct node
{
int a,b;
int id;
} p[N];
LL lz[N<<],s[N<<];
LL sum[N<<];
int po[N];
LL mul(LL a,LL b,LL m)
{
LL d,t;
d=;
t=a;
while (b>)
{
if (b%==)
d=(d*t)%m;
b/=;
t=(t*t)%m;
}
return d;
}
bool cmp(node x,node y)
{
return x.a<y.a;
}
bool cmpp(node x,node y)
{
return x.b<y.b;
}
void up(int w)
{
s[w] = (s[w<<]+s[w<<|])%mod;
}
void build(int l,int r,int w)
{
lz[w] = ;
if(l==r)
{
s[w] = ;
return ;
}
int m = (l+r)>>;
build(l,m,w<<);
build(m+,r,w<<|);
up(w);
}
void down(int w,int m)
{
if(lz[w]!=)
{
lz[w<<] = (lz[w<<]*lz[w])%mod;
lz[w<<|] = (lz[w<<|]*lz[w])%mod;
s[w<<] = (s[w<<]*lz[w])%mod;
s[w<<|] = (s[w<<|]*lz[w])%mod;
lz[w] = ;
}
}
void update(int p,LL d,int l,int r,int w)
{
if(l==r)
{
s[w] = d;
return ;
}
down(w,r-l+);
int m = (l+r)>>;
if(p<=m)
update(p,d,l,m,w<<);
else
update(p,d,m+,r,w<<|);
up(w);
}
void update1(int a,int b,LL d,int l,int r,int w)
{
if(a<=l&&b>=r)
{
s[w] = (s[w]*d)%mod;
lz[w] = (lz[w]*d)%mod;
return ;
}
down(w,r-l+);
int m = (l+r)>>;
if(a<=m) update1(a,b,d,l,m,w<<);
if(b>m) update1(a,b,d,m+,r,w<<|);
up(w);
}
LL query(int a,int b,int l,int r,int w)
{
if(a<=l&&b>=r) return s[w];
int m = (l+r)>>;
LL res = ;
if(a<=m) res+=query(a,b,l,m,w<<);
if(b>m) res = (res+query(a,b,m+,r,w<<|))%mod;
return res;
}
void up1(int w)
{
sum[w] = sum[w<<]+sum[w<<|];
}
void build1(int l,int r,int w)
{
if(l==r)
{
sum[l] = ;
return ;
}
int m = (l+r)>>;
build1(l,m,w<<);
build1(m+,r,w<<|);
up1(w);
}
void update2(int p,int l,int r,int w)
{
if(l==r)
{
sum[w] = ;
return ;
}
int m = (l+r)>>;
if(p<=m)
update2(p,l,m,w<<);
else update2(p,m+,r,w<<|);
up1(w);
}
int query1(int a,int b,int l,int r,int w)
{
if(a<=l&&b>=r)
{
return sum[w];
}
int m = (l+r)>>;
int res=;
if(a<=m) res+=query1(a,b,l,m,w<<);
if(b>m) res+=query1(a,b,m+,r,w<<|);
return res;
}
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF)
{
memset(sum,,sizeof(sum));
for(i = ; i<= n; i++)
{
scanf("%d%d",&p[i].a,&p[i].b);
p[i].id = i;
}
sort(p+,p+n+,cmp);
for(i = ; i <= n ; i++)
{
po[p[i].id] = i;
}
sort(p+,p+n+,cmpp);
build(,n,);
LL ans = ;
build1(,n,);
for(i = ; i <= n; i++)
{
int k = query1(,po[p[i].id],,n,);
//cout<<k<<" "<<p[i].a<<" "<<po[p[i].id]<<endl;
update2(po[p[i].id],,n,);
update(po[p[i].id],mul(,p[i].a+k,mod),,n,);
LL ss = query(po[p[i].id],n,,n,);
// cout<<ss<<endl;
ans=(ans+(mul(,p[i].b,mod)*ss)%mod)%mod;
if(po[p[i].id]<n)
update1(po[p[i].id]+,n,,,n,);
}
printf("%I64d\n",ans);
}
return ;
}

2014 Multi-University Training Contest 5的更多相关文章

  1. HDU4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)

    Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  2. hdu 4946 2014 Multi-University Training Contest 8

    Area of Mushroom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  3. 2014 Multi-University Training Contest 9#11

    2014 Multi-University Training Contest 9#11 Killing MonstersTime Limit: 2000/1000 MS (Java/Others)   ...

  4. 2014 Multi-University Training Contest 9#6

    2014 Multi-University Training Contest 9#6 Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Oth ...

  5. 2014 Multi-University Training Contest 1/HDU4861_Couple doubi(数论/法)

    解题报告 两人轮流取球,大的人赢,,, 贴官方题解,,,反正我看不懂.,,先留着理解 关于费马小定理 关于原根 找规律找到的,,,sad,,, 非常easy找到循环节为p-1,每个循环节中有一个非零的 ...

  6. 2014 Multi-University Training Contest 1/HDU4864_Task(贪心)

    解题报告 题意,有n个机器.m个任务. 每一个机器至多能完毕一个任务.对于每一个机器,有一个最大执行时间Ti和等级Li,对于每一个任务,也有一个执行时间Tj和等级Lj.仅仅有当Ti>=Tj且Li ...

  7. hdu 4937 2014 Multi-University Training Contest 7 1003

    Lucky Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) T ...

  8. hdu 4941 2014 Multi-University Training Contest 7 1007

    Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  9. hdu 4939 2014 Multi-University Training Contest 7 1005

    Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

  10. hdu 4930 Fighting the Landlords--2014 Multi-University Training Contest 6

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930 Fighting the Landlords Time Limit: 2000/1000 MS ...

随机推荐

  1. php number_format()保留小数点后几位

    [PHP_保留两位小数的相关函数] php保留两位小数并且四舍五入 Php代码   1     $num = 123213.666666;  2     echo sprintf("%.2f ...

  2. 22、JSON/jQuery上

      1)掌握JSON及其应用 2)了解jQuery的背景和特点 3)理解js对象和jQuery对象的区别 4)掌握jQuery九类选择器及应用(上)   声明:今天服务端我们使用Struts2技术 一 ...

  3. C/C++的一些备忘

    今天使用source insight阅读videoserver源码,有一些符号ctrl+左键点击显示找不到,先是rebuild工程和同步,没有效果,然后Options->Preferences- ...

  4. 20145227《Java程序设计》第3次实验报告

    20145227<Java程序设计>第3次实验报告 实验步骤与内容 一.实验内容 XP基础 XP核心实践 相关工具 二.实验过程 (一)敏捷开发与XP 1.XP是以开发符合客户需要的软件为 ...

  5. [HTML]表格的一切

    如何设置HTML页面自适应宽度的table(表格): <table width="95%" border="1" cellpadding="2& ...

  6. WCF自定义地址路由映射(不用svc文件)

    一般在创建WCF服务时会用Serivce.svc文件访问,地址如:http://localhost/applicationname/Serivce.svc/Name 现在用路由映射成:http://l ...

  7. 欧拉回路-Door Man 分类: 图论 POJ 2015-08-06 10:07 4人阅读 评论(0) 收藏

    Door Man Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2476 Accepted: 1001 Description ...

  8. C#中求数组的子数组之和的最大值

    <编程之美>183页,问题2.14——求子数组的字数组之和的最大值.(整数数组) 我开始以为可以从数组中随意抽调元素组成子数组,于是就有了一种想法,把最大的元素抽出来,判断是大于0还是小于 ...

  9. java实现UDP协议传输DatagramSocket

    摘自:http://blog.csdn.net/wintys/article/details/3525643/ Server端. package com.topca.server; import ja ...

  10. 课务IOS概述_1

    1.网络 2.多线程 3.各种图形 4.动画 5.面向对象的数据库   Preconditions: 1.CS106 A和B 或CS106X 2.CS107或CS108更好 3.CS110就更好了 熟 ...