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. socket的心跳包机制

    网络中的接收和发送数据都是使用操作系统中的SOCKET进行实现.但是如果此套接字已经断开,那发送数据和接收数据的时候就一定会有问题.可是如何判断这个套接字是否还可以使用呢?这个就需要在系统中创建心跳机 ...

  2. C#:通过Window API接口实现WiFi

    1.获取Mac地址 //WiFi通知回调 private WlanApi.WLAN_NOTIFICATION_CALLBACK _notificationCallback; this._notific ...

  3. JavaScript DOM 编程艺术(第2版)读书笔记(1)

    JavaScript 简史 JavaScript 是Netscape公司与Sun公司合作开发的.在 JavaScript 1.0发布时,Netscape Navigator主宰着浏览器市场.微软在推出 ...

  4. DevExpress.XtraGrid.Views.BandedGrid.BandedGridView

    使用的是DevExpress.XtraGrid.Views.BandedGrid.BandedGridView 类 没有在工具箱里找到对应控件 ,绕了一下,先创建一个gridcontrol ,然后gr ...

  5. c#中委托和事件(续)(转)

    本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器.异常处理.超时处理和异步方法调用等内容. 为什么要使用事件而不是委托变量? 在 C#中的委托和事件 中,我提出了两个为 ...

  6. UVa(1658),Admiral,海军上将,拆点,MCMF

    题目链接:https://uva.onlinejudge.org/external/16/1658.pdf 题意:求1到N的两条路(不能相交),距离和最小. 分析: 第一次做拆点,有点意思.刚开始一直 ...

  7. Poj(1469),二分图最大匹配

    题目链接:http://poj.org/problem?id=1469 COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

  8. Mysql-学习笔记(==》插入修改数据二)

    USE db; -- 建立学生信息表CREATE TABLE student( sno INT UNSIGNED NOT NULL AUTO_INCREMENT, sname VARCHAR(20) ...

  9. C#和SQl 注入字符串的攻击 和 防止注入字符转的攻击

    --SQl中 --建立ren的数据库,插入一条信息 create database ren go use ren go create table xinxi ( code ) primary key, ...

  10. 利用JDBC处理mysql大数据--大文本和二进制文件等

    转载自http://www.cnblogs.com/xdp-gacl/p/3982581.html 一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob, ...