高精硬上似乎跑不過,其實可以都取個$log$。那麼只需要比較$y\times log ^x$和$\sum \limits _^y log^i$就好了。
#includeusing namespace std;int t;
double x,y;
void work()
int main()
顯然目標區間合法的充要條件是:把位置按照$mod \ k$意義分組,每組的權值和應該相等。
必要性:每次操作對於每一組的改變量都相同,所以最終的和也必然相等。
充分性:……很顯然吧。
直接hash表維護就好了,每次修改完判斷是不是只有一種權值和即可。
#include#include#include#define olusing namespace std;
int read()
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}const int n=2e6+5;
int n,k,q,a[n],sum[n];
struct hashtable
}s;int main()
$,除以2可以留在外面做。
#include#include#include#define ol
using namespace std;
typedef long long ll;
int read()
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}const int n=2e5+5;
int n,fa[n],a[n],pos[n];
int to[n<<1],head[n],nxt[n<<1],tot;
ll v[n],ans;
void add(int x,int y)
int root[n],type,lp[n*30],rp[n*30],ls[n*30],rs[n*30];
ll w[n*30];
void up(int k,int l,int r)
if(lp[ls[k]]==mid)lp[k]=lp[rs[k]]?lp[rs[k]]:mid;
if(rp[rs[k]]==mid+1)rp[k]=rp[ls[k]]?rp[ls[k]]:mid+1;
}void update(int &k,int l,int r,int pos)
int mid=l+r>>1;
if(pos<=mid)update(ls[k],l,mid,pos);
else update(rs[k],mid+1,r,pos);
up(k,l,r);
}int merge(int x,int y,int l,int r)
void dfs(int x)
ans+=w[root[x]]/2*v[x];
}int main()
for(int i=1;i<=n;i++)
a[i]=read(),pos[a[i]]=i;
for(int i=1;i<=n;i++)
v[i]=read();
for(int i=n;i;i--)
v[i]-=v[fa[i]];
dfs(1);
printf("%lld\n",ans);
return 0;
}
csp s模擬測試94
一場簡單題,打爆了。t1 腦抽分解質因數準備分子分母消,想了半天發現 jb 互質直接上天,果斷碼了高精滾蛋。t2 無腦手玩大樣例,突然靈光一閃想到對映到前 k 大小的區間,t3 寫完暴力準備划水,突然發現特殊性質可寫,10 分鐘拯救了 25 分。8003 24 46 7003 24 58 6503 ...
CSP S模擬測試69 題解
一如既往的垃圾,又回到了那個場場墊底的自己,明明考場上都想到正解了,但是就是拿不到分,可能是互奶把rp用光了吧以後一定加強訓練 能力。t1 考場上一直yy矩陣快速冪,雖然自己矩陣快速冪一點都不會還是硬著頭皮yy,發現不可做之後並沒有及時轉化思路,但其實自己預處理的陣列就是正解。切記 不僅矩陣快速冪是...
CSP S 模擬測試 51 題解
慣例先看一遍三道題,t1 一開始反應要求割點,但是這是有向圖,肯定不能求割點,康了一下資料範圍,有40 是樹的,還不錯,決定待會在打。看t2 字串題,完了我字串最弱了,肯定只能打暴力了,帶著前兩題都不會的心情,看了t3發現是期望,完了爆0了,在一看,發現是sb原題,還簡單一點,趕緊把t3碼了一遍過大...