Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34397 22级廖思学 【S】T1 C++ 通过 100 615 MS 59380 KB 1811 2024-11-07 18:36:17

Tests(10/10):


#include<bits/stdc++.h> using namespace std; #define ls pos<<1 #define rs pos<<1|1 #define int long long const int N=1e6+10; int n,a[N],r[N],v[N],ans; struct Tree{int num,lz;}t[N<<2]; void pushup(int pos){t[pos].num=t[ls].num+t[rs].num;} void pushdown(int pos,int l,int r){ if(!t[pos].lz)return; int mid=(l+r)>>1; t[ls]={(mid-l+1)-t[ls].num,t[ls].lz^1}; t[rs]={(r-mid)-t[rs].num,t[rs].lz^1}; t[pos].lz=0; return; } void build(int pos,int l,int r){ // cout<<pos<<" "<<l<<" "<<r<<endl; if(l==r){t[pos].num=a[l];return;} int mid=(l+r)>>1; build(ls,l,mid);build(rs,mid+1,r); pushup(pos); } void modify(int pos,int l,int r,int ql,int qr){ if(l>=ql&&r<=qr){t[pos]={r-l+1-t[pos].num,t[pos].lz^1};return;} pushdown(pos,l,r); int mid=(l+r)>>1; if(ql<=mid)modify(ls,l,mid,ql,qr); if(qr>mid)modify(rs,mid+1,r,ql,qr); pushup(pos); } int query(int pos,int l,int r,int x){ // cout<<pos<<" "<<l<<" "<<r<<" "<<x<<endl; if(l==r)return t[pos].num; pushdown(pos,l,r); int mid=(l+r)>>1; if(x<=mid)return query(ls,l,mid,x); else return query(rs,mid+1,r,x); } signed main(){ scanf("%lld",&n); string s;cin>>s; for(int i=0;i<s.length();i++)a[i+1]=s[i]-'0'; // for(int i=1;i<=n;i++)cout<<i<<" "<<a[i]<<endl; for(int i=1;i<=n;i++){scanf("%lld",&r[i]);} for(int i=1;i<=n;i++){scanf("%lld",&v[i]);} build(1,1,n); for(int i=1;i<=n;i++){ if(query(1,1,n,i)!=0){ // cout<<i<<endl; ans+=v[i];modify(1,1,n,i,r[i]); } // for(int i=1;i<=n*2;i++)cout<<t[i].num<<" "; // cout<<endl; // for(int i=1;i<=n*2;i++)cout<<t[i].lz<<" "; // cout<<endl; } printf("%lld\n",ans); return 0; }


测评信息: