感觉很对为什么wa了
查看原帖
感觉很对为什么wa了
1122530
elpsconr楼主2024/11/10 04:14
/*
   卫风·芄兰
芄兰之支,童子佩觿.
虽则佩觿,能不我知?
容兮遂兮,垂带悸兮.
芄兰之叶,童子佩韘.
虽则佩韘,能不我甲?
容兮遂兮,垂带悸兮.
*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rep_(i,a,b) for(int i=a;i>=b;--i)
#define all(x) x.begin(),x.end()
#define bp(x) __builtin_popcountll(x)
#define cy cout<<"YES"<<endl
#define cn cout<<"NO"<<endl
#define lc (rt<<1)
#define rc (rt<<1|1)
mt19937_64 rnd(time(0));
const int N=3e5+5,yyx=1e9+7;
vector<int> to[N];
int n,m,p[N];
inline int mod(int x){
  return (x%yyx+yyx)%yyx;
}
inline int cmin(int &x,int y){
  return x>y?x=y,1:0;
}
inline int cmax(int &x,int y){
  return x<y?x=y,1:0;
}
int sum(int l,int r){
    if(l>r) return 0;
    return (l+r)*(r-l+1)/2;
}
inline void solve(){
  cin>>n>>m;
  set<int> s;
  map<int,int> a;
  rep(i,1,m) cin>>p[i],s.insert(p[i]);
  rep(i,1,m){
    int x;cin>>x;
    a[p[i]]=x;
  }
  int ans=0;
  sort(p+1,p+1+m);
  int last=n,now=n,mi=2e14;
  while(s.size()){
    int j=*s.rbegin();
    mi=j;
    last=(now!=n?now-1:n);
    now=max(now-a[j],j);
    //cout<<now<<" "<<last<<endl;
    s.erase(j);
    ans+=sum(now,last)-(last-now+1)*j;
  }
  if(last-now+1<=a[mi]) now--;
  if(!now) cout<<ans<<endl;
  else cout<<-1<<endl;
}
signed main(){
  cin.tie(0)->sync_with_stdio(0);
  //freopen("D://321//in.txt","r",stdin);
  //freopen("D://321//out.txt","w",stdout);
  int _=1;
  //cin>>_;
  while(_--)
  solve();
  return 0;
}
2024/11/10 04:14
加载中...