1. 程式人生 > 其它 >3.19省選模擬

3.19省選模擬

T1

//大概就是給定溫度
//使得消耗能量最多
//首先冰系要高於溫度
//火系要低於溫度
//那麼考慮火系升序,冰系降序
//那麼就相當於查詢某一段字首/字尾的能量的最小值乘二
//目前可以簡單的想到雙log直接二分選擇,直接找函式交點,然後樹狀陣列求
//那麼考慮優化到單log,直接線段樹上二分不好嗎?
//由於最後的答案必然是一個戰士的溫度,那麼可以離散化了
//那麼只需要在樹狀陣列上套個倍增就好了,因為是單峰的,故可以直接加
#include<bits/stdc++.h>
#define int long long
#define MAXN 2000005
using namespace std;
struct node
{
      int op,k,t,x,y;
}que[MAXN];
struct Tr
{
 int tr[MAXN],n;
 void init(int x)
{
       n=x;
}
 int lowbit(int x)
{
     return x&(-x);
}
 void Insert(int x,int y)
{
      while(x<=n)
  {
      tr[x]+=y,x+=lowbit(x);
  }
}
 int query(int x)
{
   int res=0;
   while(x)
{
res+=tr[x],x-=lowbit(x);
}
   return res;
}
 int get(int x)
{
     return tr[x];
}
}tr0,tr1;
int n,cnt,sum1,p[MAXN];
signed main()
{
     scanf("%lld",&n);
     for(int i=1;i<=n;i++)
    {
       scanf("%lld",&que[i].op);
       if(que[i].op==1)
  {
     scanf("%lld%lld%lld",&que[i].t,&que[i].x,&que[i].