QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#504626 | #9104. Zayin and Forest | Xunwuqishi# | TL | 0ms | 0kb | C++20 | 3.4kb | 2024-08-04 14:14:38 | 2024-08-04 14:14:38 |
answer
#include<bits/stdc++.h>
#define Alex std::ios::sync_with_stdio(false),std::cin.tie(0),std::cout.tie(0);
#define int long long
#define double long double
const int QAQ = 0;
const double eps = 1e-10;
const int mod = 1e9 + 7;
int n,m;
inline int f(int x)
{
if(x % 2 == 1) return x + 1;
int t = 0;
while(x % 2 == 0)
{
x = x / 2;
t++;
}
return (x + 1) * (1LL << t);
}
//struct Treap{ int val,dat,size,cnt; }Tree[N];
//inline int Add_Spot(int v)
//{
// tot = tot + 1;
// Tree[tot].val = v;
// Tree[tot].dat = rand();
// Tree[tot].size = 1;
// Tree[tot].cnt = 1;
// return tot;
//}
//inline void Push_Up(int k)
//{
// Tree[k].size = Tree[ch[k][0]].size + Tree[ch[k][1]].size + Tree[k].cnt;
//}
//inline void Build_Tree()
//{
// root = Add_Spot(-INF),ch[root][1] = Add_Spot(INF);
// Push_Up(root);
//}
//inline void Rotate(int &k,int d)
//{
// int temp = ch[k][d ^ 1];
// ch[k][d ^ 1] = ch[temp][d];
// ch[temp][d] = k;
// k = temp;
// Push_Up(ch[k][d]);
// Push_Up(k);
//}
//inline void insert(int &k,int v)
//{
// if(! k)
// {
// k = Add_Spot(v);
// return;
// }
// if(v == Tree[k].val) Tree[k].cnt = Tree[k].cnt + 1;
// else
// {
// int d = v < Tree[k].val ? 0 : 1;
// insert(ch[k][d],v);
// if(Tree[k].dat < Tree[ch[k][d]].dat) Rotate(k,d ^ 1);
// }
// Push_Up(k);
//}
//inline void Remove(int &k,int v)
//{
// if(! k) return;
// if(v == Tree[k].val)
// {
// if(Tree[k].cnt > 1)
// {
// Tree[k].cnt = Tree[k].cnt - 1;
// Push_Up(k);
// return;
// }
// if(ch[k][0] || ch[k][1])
// {
// if(! ch[k][1] || Tree[ch[k][0]].dat > Tree[ch[k][1]].dat)
// {
// Rotate(k,1);
// Remove(ch[k][1],v);
// } else
// {
// Rotate(k,0);
// Remove(ch[k][0],v);
// }
// Push_Up(k);
// }else k = 0;
// return;
// }
// v < Tree[k].val ? Remove(ch[k][0],v) : Remove(ch[k][1],v);
// Push_Up(k);
//}
//inline int Get_Rank(int k,int v)
//{
// if(! k) return 0;
// if(v == Tree[k].val) return Tree[ch[k][0]].size + 1;
// else if(v < Tree[k].val) return Get_Rank(ch[k][0],v);
// else return Tree[ch[k][0]].size + Tree[k].cnt + Get_Rank(ch[k][1],v);
//}
//inline int Get_Val(int k,int rank)
//{
// if(! k) return INF;
// if(rank <= Tree[ch[k][0]].size) return Get_Val(ch[k][0],rank);
// else if(rank <= Tree[ch[k][0]].size + Tree[k].cnt) return Tree[k].val;
// else return Get_Val(ch[k][1],rank - Tree[ch[k][0]].size - Tree[k].cnt);
//}
//inline int Get_Pre(int v)
//{
// int k = root,pre;
// while(k)
// {
// if(Tree[k].val < v) pre = Tree[k].val,k = ch[k][1];
// else k = ch[k][0];
// }
// return pre;
//}
//inline int Get_Next(int v)
//{
// int k = root,next;
// while(k)
// {
// if(Tree[k].val > v) next = Tree[k].val,k = ch[k][0];
// else k = ch[k][1];
// }
// return next;
//}
signed main()
{
Alex;
int _;
_ = 1;
while(_--)
{
std::cin>>n>>m;
std::map<int,int> ma;
std::vector<int> V;
V.clear();
ma.clear();
for(int i = 1;i <= m;i++)
{
int op;
std::cin>>op;
if(op == 1)
{
int x,v;
std::cin>>x>>v;
while(x <= n)
{
if(ma[x] == 0) V.push_back(x);
ma[x] = ma[x] + v;
x = f(x);
}
}else
{
int l,r;
int ans = 0;
std::cin>>l>>r;
for(int j = 0;j < V.size();j++)
if(V[j] >= l && V[j] <= r) ans = ans + ma[V[j]];
std::cout<<ans<<'\n';
}
}
}
return QAQ;
}
详细
Test #1:
score: 0
Time Limit Exceeded
input:
1000000000 20000 2 384578735 526547442 1 64211261 592970906 1 512065247 448267721 1 44993150 127180320 1 880319036 927623947 1 170536687 572121854 1 896600029 804033011 1 666246328 754201635 1 654066651 179982083 2 240989825 984888006 2 372004567 858916479 2 76127818 98606736 1 181794163 902842353 1...
output:
0 43148875202 17613404710 0 32808578044 28190043566 15641637055 78276219892 14955165236 20262224725 105057452192 17002492367 57916137452 27165464255 72766353838 39458327919 38294102627 264448717384 0 70928519548 279674530483 88885017175 111664599432 69703816663 211506104092 104120007714 34403738515 ...