cf round546 cde
第一题会卡一下同时用set和cin。。
其他的注意下矩阵对角线下标的应用即可
#include<bits/stdc++.h>
using namespace std;
#define maxn 2005
int mp1[maxn][maxn],n,m,mp2[maxn][maxn];
vector<int>s1[maxn],s2[maxn];
int main(){
cin>>n>>m;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&mp1[i][j]),s1[i+j].push_back(mp1[i][j]);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&mp2[i][j]),s2[i+j].push_back(mp2[i][j]); for(int i=;i<=n+m;i++){
sort(s1[i].begin(),s1[i].end());
sort(s2[i].begin(),s2[i].end());
if(s1[i]!=s2[i]){
puts("NO");
return ;
}
}
puts("YES");
}
/*
问题可转化为有多少个点可以把最后一个点(n)推移上来
按位置将所有点排序,建立一个集合s
起初将最后一个点放在集合里,然后倒序访问之前的结点,
如果结点i可以将n推上来,那么之后的结点j再要将n推上来时就不用考虑i,
否则需要考虑j是否可以推到i后面,再然后将n推上来
如果之前结点i有边到达集合里的所有点,那么这个结点就可以把点n推上来,
如果不行,这个点i放入集合中
复杂度分析:每条边都会在集合里判断一次,mlogn
*/
#include<bits/stdc++.h>
#include<set>
using namespace std;
#define maxn 500005
int m,n,pos[maxn],id[maxn];
set<int>s,G[maxn];
set<int>::iterator it; int main(){
cin>>n>>m;
for(int i=;i<=n;i++)
scanf("%d",&id[i]),pos[id[i]]=i;
int u,v;
for(int i=;i<=m;i++){
scanf("%d%d",&u,&v);
G[u].insert(v);
} int ans=;
s.insert(id[n]);
for(int i=n-;i>=;i--){
int cur=id[i],flag=;
for(it=s.begin();it!=s.end();it++)
if(G[cur].find(*it)==G[cur].end()){
flag=;
s.insert(cur);
break;
}
if(!flag)ans++;
}
cout<<ans<<endl;
}
e也太难了。。留个坑吧
补坑。。区间覆盖线段树调了半天,最后发现有个地方没写long long ...气死我了.
所以总结一下,,区间覆盖和区间更新的pushdown还是有点差距的,,还有本题的lazy初始值要设为INF
/*
给定数组a1...an, k1...kn-1
两种操作:
第一种为ai+x,完成本次操作后若ai+1<ai+ki,则ai+1=ai+ki,以此类推
即后面的数不得小于前面的数+ki
第二种为求和操作
推导公式可得a1<=a2-sumk1<=a3-sumk2<=a4-sumk3...<=an-sumkn-1
令 bi=ai-sumki-1
b1<=b2<=b3<=b4...<=bn
ai+x <=> bi+x,同时所有在bi后面且小于bi+x的数都要变成bi+x
所以直接用lower_bound找到第一个不小于bi+x的数
用线段树维护bi,进行区间覆盖操作
query时先query 区间bi的和,再使用前缀和求出区间sumki的值
注意lazy
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 200005
#define ll long long
ll n,m,a[maxn],k[maxn],b[maxn],sumk[maxn],sumkk[maxn];
#define INF 1e18
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
ll sum[maxn<<],lazy[maxn<<];
inline void pushup(int rt){
sum[rt]=sum[rt<<]+sum[rt<<|];
}
inline void pushdown(int l,int r,int rt){
if(lazy[rt]!=INF+){
int m=l+r>>;
sum[rt<<]=lazy[rt]*(m-l+);
sum[rt<<|]=lazy[rt]*(r-m);
lazy[rt<<]=lazy[rt];
lazy[rt<<|]=lazy[rt];
lazy[rt]=INF+;
}
}
void build(int l,int r,int rt){
lazy[rt]=INF+;
if(l==r){sum[rt]=b[l];return;}
int m=l+r>>;
build(lson);build(rson);
pushup(rt);
}
void modify(int L,int R,ll val,int l,int r,int rt){
if(L<=l&&R>=r){
lazy[rt]=val;sum[rt]=val*(r-l+);
return;
}
pushdown(l,r,rt);
int m=l+r>>;
if(L<=m)modify(L,R,val,lson);
if(R>m)modify(L,R,val,rson);
pushup(rt);
} ll query(int L,int R,int l,int r,int rt){
if(L<=l && R>=r)return sum[rt];
pushdown(l,r,rt);
int m=l+r>>;
ll res=;
if(L<=m)res+=query(L,R,lson);
if(R>m)res+=query(L,R,rson);
return res;
}
void add(int i,ll val){
if(val==)return;
ll cur=query(i,i,,n,)+val;//查询第l个点当前值
int l=i,r=n,mid,ans=l;//查询最右边的比cur小的数
while(l<=r){
mid=l+r>>;
if(query(mid,mid,,n,)<cur)
ans=mid,l=mid+;
else r=mid-;
}
modify(i,ans,cur,,n,);
}
int main(){
cin>>n;
for(int i=;i<=n;i++)cin>>a[i];
for(int i=;i<n;i++)cin>>k[i];
for(int i=;i<=n;i++)sumk[i]=sumk[i-]+k[i-];
for(int i=;i<=n;i++)b[i]=a[i]-sumk[i];
for(int i=;i<=n;i++)sumkk[i]=sumkk[i-]+sumk[i];
build(,n,);
cin>>m;
while(m--){
char op[];ll l,r;
cin>>op>>l>>r;
if(op[]=='+')add(l,r);
else cout<<query(l,r,,n,)+sumkk[r]-sumkk[l-]<<"\n";
}
return ;
}
cf round546 cde的更多相关文章
- cf round599 CDE
C:结论题:设n=k*p1+r=a*p2+b,只要n有两个及以上质因子,那么必然可以用第一个质因子表示出第二个质因子,所以答案是1 反之显然是其最小质因子 /* 1 2 3 4 1 3 2 4 n的所 ...
- petrozavodsk summer 2018 游记&&总结
day0: 出发前训了一场比较水bapc2017保持手感(恢复信心),成功AK了,不过罚时略高.然后三人打车从紫金港到杭州东站,坐高铁到上海虹桥,再坐机场快线到浦东机场(傻乎乎的jsb帮爸爸付了钱,然 ...
- CF 987
毒瘤啊啊啊啊啊 虽然排名还不错,331,但是B我没做出来...... 这是战绩: 可以看到我大发神威势如破竹的A了CDE,但是B把我卡了三次...不然我就能进前300了(还是很水). 逐一分析题目: ...
- 关于cf[转]
还不怎么熟悉cf呢.. 你应当知道的关于Codeforces的事情 Codeforces简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏).网址: codeforces.com 这是一个俄国 ...
- ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'
凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- cf Round 613
A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...
- ARC下OC对象和CF对象之间的桥接(bridge)
在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...
- [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
随机推荐
- 读书笔记 Facebook在移动端都干了啥,居然让用户爱上广告
文章来源:http://news.cnblogs.com/n/513297/ Facebook武器: Facebook 的武器只有一个:让广告主基于目标用户群投放个性化的精准广告.基于高质量的广告内容 ...
- 【blog】SpringBoot的可执行文件如何在Linux中后台运行(待补充...)
参考链接 linux下利用nohup后台运行jar文件包程序:http://blog.csdn.net/tang9140/article/details/38899345
- java String、StringBuffer、StringBuild、StringTokenizer
StringBuffer线程安全.StringBuilder线程不安全 效率: StringBuilder(线程不安全) > StringBuffer(线程安全) > String Str ...
- [Docker]CentOS7通过rpm包安装Docker
前几天写过一篇文章:[Docker]CentOS7下Docker安装教程,直接使用yum命令下载Docker即可.但是前提是你需要***,所以这篇文章来讲讲,如果不会***,该如何安装Docker. ...
- Latex自定义文档纸张大小
\usepackage{geometry} \special{papersize=8.5in,11in}%纸张大小为8.5inch×11inch
- Pytorch复现Faster-RCNN
5月的最后一天,需要写点什么. 通过前几篇博客对Faster-RCNN算是有了一个比较全面的认识,接下来的半个月断断续续写了一些代码,基本上复现了论文.利用torchvision的VGG16预训练权重 ...
- PEP525--异步生成器
[译] PEP 525--异步生成器 PEP原文:https://github.com/python/peps/blob/master/pep-0525.txt 创建日期:2016-07-18 译者 ...
- ADO中最重要的对象有三个:Connection、Recordset和Command
ConnectionPtr: _ConnectionPtr m_pConnection; HRESULT hr; try{ hr = m_pConnection.CreateInstance(_uui ...
- boost 实现http断点续传
// testc.cpp : Defines the entry point for the console application. // #include "stdafx.h" ...
- 检索每个字符串的子串(python散列表实现)
import re def get_str(i,num): str_list = re.findall(r'.{{{str_length}}}'.format(str_length=i), num) ...