其他分享
首页 > 其他分享> > 9.6模拟赛

9.6模拟赛

作者:互联网

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const ll N=51;
 5 ll n,m,a[N],lj[N],ans,sum,len,tmp;
 6  
 7 inline ll re_ad() {
 8     char ch=getchar(); ll x=0,f=1;
 9     while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
10     while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
11     return x*f;
12 }
13  
14 inline ll gcd(ll x,ll y) { return !y?x:gcd(y,x%y); }
15  
16 void dfs(ll d) {
17 //  printf("%lld\n",d);
18     if(d>=n+1) {
19 //      printf("%lld %lld\n",len,sum);
20         tmp=((len&1)?-1:1)*sum;
21         ans+=m/tmp;
22         return ;
23     }
24     dfs(d+1);
25     if(a[d]>m) return ;
26     ll G=gcd(sum,a[d]);
27 //  printf("gcd: %lld %lld %lld\n",sum,a[d],G);
28     if(sum/G*a[d]>m) return ;
29     sum=sum/G*a[d],lj[d]=1,++len;
30     dfs(d+1);
31     sum=sum/a[d]*G,lj[d]=0,--len;
32 }
33  
34 int main()
35 {
36     m=re_ad(),n=re_ad();
37     for(ll i=1;i<=n;++i) a[i]=re_ad();
38     if(n==0) { printf("%lld\n",m); return 0; }
39     sum=1,dfs(1);
40     printf("%lld\n",ans);
41 //  system("pause");
42     return 0;
43 }

 

 

 

 

 

 

 

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const ll N=4e5+11,Tree_Sz=1e6+6e5+11;
 5 ll n,nn,k,a[N],b[N],seg[N];
 6  
 7 inline ll re_ad() {
 8     char ch=getchar(); ll x=0,f=1;
 9     while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
10     while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
11     return x*f;
12 }
13  
14 namespace ST {
15     ll val[2][Tree_Sz];
16     inline void Init() {
17         for(int i=0;i<=(n<<3)+(n<<1);++i) val[0][i]=val[1][i]=0;
18     }
19     inline void Pushup(ll d,ll op) {
20         val[op][d]=val[op][d<<1]+val[op][d<<1|1];
21     }
22     void modify(ll d,ll l,ll r,ll x,ll z,ll op) {
23         if(l==r) {
24             val[op][d]+=z;
25             return ;
26         }
27         ll mid=(l+r)>>1;
28         if(x<=mid) modify(d<<1,l,mid,x,z,op);
29         else modify(d<<1|1,mid+1,r,x,z,op);
30         Pushup(d,op);
31     }
32     inline void Modify(ll x,ll z,ll op) {
33         modify(1,1,n*2,x+n,z,op);
34     }
35     ll query(ll d,ll l,ll r,ll x,ll y,ll op) {
36         if(x<=l && r<=y) {
37             return val[op][d];
38         }
39         ll mid=(l+r)>>1,res=0;
40         if(x<=mid) res+=query(d<<1,l,mid,x,y,op);
41         if(y>=mid+1) res+=query(d<<1|1,mid+1,r,x,y,op);
42         return res;
43     }
44     inline ll Query(ll x,ll op) {
45         return query(1,1,n*2,x+n,n*2,op);
46     }
47 }
48  
49 inline bool check(ll d) {
50     ST::Init();
51     ll res=0,lj=0;
52     for(ll i=1;i<=n;++i) seg[i]=(a[i]>d)?1:-1;
53     ST::Modify(seg[1],1,0);
54     res+=(seg[1]==1)?1:0;
55     for(ll i=2,j=1;i<=n;++i,j^=1) {
56         lj-=seg[i];
57         ST::Modify(seg[i]+lj,1,j);
58 //      printf("awa\n");
59         res+=ST::Query(lj+1,j);
60     }
61 //  printf("check: %lld %lld\n",d,res);
62     if(res<k) return true;
63     return false;
64 }
65  
66 inline ll Binary_Find() {
67     ll l=1,r=n,ans=0;
68     while(l<=r) {
69         ll mid=(l+r)>>1;
70 //      printf("mid: %lld %lld %lld\n",l,r,mid);
71         if(check(b[mid])) r=mid-1,ans=mid;
72         else l=mid+1;
73     }
74     return b[ans];
75 }
76  
77 int main()
78 {
79     n=re_ad(),k=re_ad();
80     for(ll i=1;i<=n;++i) b[i]=a[i]=re_ad();
81     sort(b+1,b+n+1);
82     for(ll i=n;i>=1;i-=2) nn+=i;
83 //  printf("%lld\n",nn);
84     printf("%lld\n",Binary_Find());
85 //  for(ll i=1;i<=nn;++i) printf("%lld ",check(i)); puts("");
86 //  system("pause");
87     return 0;
88 }

 

 

 

 

 

 

 

 

 

 

 

 

 

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const ll N=2e6+11,mod=1e9+7;
 5 ll n,a[N],A,B,C,b[N],num,c[N];
 6  
 7 namespace BIT1 {
 8     ll t[N];
 9     inline ll lowbit(ll d) { return d&(-d); }
10     inline void insert(ll d,ll x) { for(;d<=num+1;d+=lowbit(d)) t[d]+=x; }
11     inline ll query(ll d) { ll res=0; for(;d>0;d-=lowbit(d)) res+=t[d]; return res; }
12 }
13  
14 namespace BIT2 {
15     ll t[N];
16     inline ll lowbit(ll d) { return d&(-d); }
17     inline void insert(ll d,ll x) { for(;d<=num+1;d+=lowbit(d)) t[d]+=x; }
18     inline ll query(ll d) { ll res=0; for(;d>0;d-=lowbit(d)) res+=t[d]; return res; }
19 }
20  
21 int main()
22 {
23     scanf("%lld%lld%lld%lld%lld",&n,&a[1],&A,&B,&C);
24     b[1]=a[1];
25     for(ll i=2;i<=n;++i) b[i]=a[i]=((a[i-1]*A)%C+B)%C;
26 //  printf("a: "); for(ll i=1;i<=n;++i) printf("%lld ",a[i]); puts("");
27     sort(b+1,b+n+1);
28     num=unique(b+1,b+n+1)-b-1;
29 //  printf("b: "); for(ll i=1;i<=n;++i) printf("%lld ",b[i]); puts("");
30     for(ll i=1;i<=n;++i) c[i]=lower_bound(b+1,b+num+1,a[i])-b;
31 //  printf("c: "); for(ll i=1;i<=n;++i) printf("%lld ",c[i]); puts("");
32     ll ans=0;
33     for(ll i=1;i<=n;++i) {
34         ll t1=BIT1::query(c[i]-1+1)%mod;
35 //      printf("%lld ",t1);
36         (t1*=a[i]*(n-i+1)%mod)%=mod;
37 //      printf("%lld ",t1);
38         ll t2=(BIT2::query(num+1)-BIT2::query(c[i]+1))%mod;
39 //      printf("%lld ",t2);
40         (t2*=(n-i+1))%=mod;
41 //      printf("%lld ",t2);
42         (ans+=t1)%=mod;
43 //      printf("%lld ",ans);
44         (ans+=t2)%=mod;
45 //      printf("%lld\n",ans);
46         BIT1::insert(c[i]+1,i); //printf("insert1: %lld %lld\n",a[i]+1,i);
47         BIT2::insert(c[i]+1,(i*a[i])%mod);
48 //      printf("test: %lld %lld %lld\n",BIT1::query(4),BIT1::query(5),BIT1::query(6));
49     }
50     for(ll i=1;i<=n;++i) (ans+=(i*(n-i+1)%mod)*a[i]%mod)%=mod;
51     printf("%lld\n",ans);
52 //  if(n>1e5) printf("%lld\n",n);
53     return 0;
54 }

 

标签:ch,return,res,sum,9.6,ll,模拟,lld
来源: https://www.cnblogs.com/shangguanshufang/p/9_6_mo_ni_sai.html