成功捐了300块,作为ACMer已经没脸了。。。。
时间不多了,准备面向就业学习了,ACM随缘吧
#include
#include
#include
#include
using namespace std;
#define int long long
const int N = 200010;
int Fmin[N][20];
int lg2[N];
int a[N],id[N];
int n,m,x;
vector<int>cnt[1500010];
void init_log()
{
lg2[0]=-1;
for(int i=1;i<N;i++)lg2[i]=lg2[i>>1]+1;
}
void init()
{
for(int i=0;i<=n;i++)Fmin[i][0]=id[i];
int k=lg2[n];
for(int j=1;j<=k;j++)
for(int i=1;i<=n-(1<<j)+1;i++)
{
Fmin[i][j]=min(Fmin[i][j-1],Fmin[i+(1<<j-1)][j-1]);
}
}
int RMQ(int l,int r)
{
int k=lg2[r-l+1];
int minv=min(Fmin[l][k],Fmin[r-(1<<k)+1][k]);
return minv;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m>>x;
memset(id,0x3f,sizeof id);
for(int i=1;i<=n;i++)
{
cin>>a[i];
cnt[a[i]].push_back(i);
}
for(int i=1;i<=n;i++)
{
int t=a[i]^x;
if(cnt[t].size()==0)continue;
int pos=upper_bound(cnt[t].begin(),cnt[t].end(),i)-cnt[t].begin();
if(pos==cnt[t].size())continue;
id[i]=cnt[t][pos];
}
init_log();
init();
for(int i=0,l,r;i<m;i++)
{
cin>>l>>r;
if(RMQ(l,r)<=r)cout<<"yes\n";
else cout<<"no\n";
}
}
E.爬树的甲壳虫—DP+概率
题目链接
#include
#include
#include
#include
using namespace std;
#define int long long
const int mod = 998244353, N = 100010;
int qmi(int a,int b){int res=1;while(b){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;}return res%mod;}
int f[N];
signed main()
{
int n;cin>>n;
for(int i=1,x,y;i<=n;i++)
{
cin>>x>>y;
f[i]=(f[i-1]+1)*y%mod*qmi(y-x,mod-2)%mod;
}
cout<<f[n]<<'\n';
}
F.青蛙过河—二分+贪心
题目链接
#include
#include
#include
#include
using namespace std;
//#define int long long
const int N = 100010;
int n,x;
int a[N];
bool check(int mid)
{
int sum=0;
for(int i=1;i<=mid;i++)sum+=a[i];
int minv=sum;
for(int i=mid+1;i<n;i++)
{
sum=sum+a[i]-a[i-mid];
minv=min(minv,sum);
if(minv<2*x)return false;
}
return true;
}
signed main()
{
cin>>n>>x;
for(int i=1;i<n;i++)cin>>a[i];
int l=1,r=n;
while(l<r)
{
int mid=l+r>>1;
if(check(mid))r=mid;
else l=mid+1;
}
cout<<r<<'\n';
}
G.最长不下降子序列
题目链接
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)